Как получить идентификатор ресурса изображения, если я знаю его имя? - PullRequest
129 голосов
/ 15 июня 2010

Как получить идентификатор ресурса изображения, если я знаю его имя (в Android)?

Ответы [ 5 ]

259 голосов
/ 15 июня 2010

С чем-то вроде этого:

String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
28 голосов
/ 26 декабря 2011

Вы также можете попробовать это:

try {
    Class res = R.drawable.class;
    Field field = res.getField("drawableName");
    int drawableId = field.getInt(null);
}
catch (Exception e) {
    Log.e("MyTag", "Failure to get drawable id.", e);
}

Я скопировал этот исходный код из URL ниже. Основываясь на тестах, выполненных на этой странице, это в 5 раз быстрее, чем getIdentifier (). Я также нашел его более удобным и простым в использовании. Надеюсь, это поможет и вам.

Ссылка: Динамическое получение ресурсов в Android

10 голосов
/ 31 мая 2014

Пример общедоступного системного ресурса:

// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");

alert

Другой способ - обратиться к документации по классу android.R.drawable .

10 голосов
/ 30 сентября 2013

Вы можете использовать эту функцию для получения идентификатора ресурса:

public static int getResourseId(Context context, String pVariableName, String pResourcename, String pPackageName) throws RuntimeException {
    try {
        return context.getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
    } catch (Exception e) {
        throw new RuntimeException("Error getting Resource ID.", e)
    } 
}

Итак, если вы хотите получить Drawable ID ресурса, вы можете вызвать метод следующим образом:

getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());

(или из фрагмента):

getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());

Для String ИД ресурса вы можете назвать его так:

getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());

и т.д ...

Осторожно : выдает исключение RuntimeException, если не удается найти идентификатор ресурса.Обязательно восстановитесь в рабочем состоянии.

Прочтите это

0 голосов
/ 16 июня 2017

Еще один сценарий, с которым я столкнулся.

String imageName = "Hello", а затем, когда он передается в функцию getIdentifier в качестве первого аргумента, он передаст имя с нулевым завершением строки и всегда вернет ноль.Передайте это imageName.substring (0, imageName.length () - 1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...