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

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

116
задан 15 июня '10 в 9:24
источник поделиться
5 ответов

Что-то вроде этого:

String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
243
ответ дан 15 июня '10 в 12:46
источник

Вы также можете попробовать следующее:

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

25
ответ дан 26 дек. '12 в 20:16
источник

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

// 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
ответ дан 31 мая '14 в 9:47
источник

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

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 Resource, вы можете вызвать метод следующим образом:

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

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

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


Для идентификатора ресурса String вы можете вызвать его следующим образом:

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

и т.д...


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

Прочтите это

9
ответ дан 30 сент. '13 в 14:49
источник

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

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

0
ответ дан 16 июня '17 в 8:13
источник

Другие вопросы по меткам или Задайте вопрос