Как получить идентификатор ресурса с известным именем ресурса?

Я хочу получить доступ к ресурсу типа String или Drawable по его имени, а не по его int id.

Какой метод я бы использовал для этого?

168
задан aminography 6 February 2019 в 12:47
поделиться

2 ответа

Это будет примерно так:

R.drawable.resourcename

Убедитесь, что пространство имен Android.R не импортировано как это может сбить с толку Eclipse (если это то, что вы используете).

Если это не сработает, вы всегда можете использовать метод контекста getResources ...

Drawable resImg = this.context.getResources().getDrawable(R.drawable.resource);

Где this.context инициализируется как Activity ], Служба или любой другой подкласс Контекст .

Обновление:

Если это желаемое имя, класс Resources (возвращаемый getResources () ) имеет метод getResourceName (int) . и getResourceTypeName (int) ?

Обновление 2 :

Класс Resources имеет следующий метод:

public int getIdentifier (String name, String defType, String defPackage) 

, который возвращает целое число указанного ресурса имя, тип и упаковка.

139
ответ дан 23 November 2019 в 20:53
поделиться

Если я правильно понял, это именно то, что вам нужно

int drawableResourceId = this.getResources().getIdentifier("nameOfDrawable", "drawable", this.getPackageName());

Где «это» - это Activity, написанное для пояснения.

Если вам нужна строка в strings.xml или идентификатор элемента пользовательского интерфейса, замените «drawable»

int resourceId = this.getResources().getIdentifier("nameOfResource", "id", this.getPackageName());

Предупреждаю, этот способ получения идентификаторов очень медленный, используйте только там, где это необходимо.

Ссылка на официальную документацию: Resources.getIdentifier (String name, String defType, String defPackage)

317
ответ дан 23 November 2019 в 20:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: