Ответы:
Примерно так:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
для получения идентификатора ImageButton (как и в случае с R.id.name).
name
? Я хочу найти идентификатор кнопки, ссылку на которую я знаю, в моем случае этоbutton1
getResource()
и getPackageName()
показывает ошибку. cannot resolve method
getResource()
и getPackageName()
это методы из Activity.
Вы также можете попробовать это:
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 (). Я также нашел его более удобным и простым в использовании. Надеюсь, это поможет и вам.
Пример для общедоступного системного ресурса:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
Другой способ - обратиться к документации по классу android.R.drawable .
Вы можете использовать эту функцию для получения идентификатора ресурса:
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 ID, вы можете вызвать метод следующим образом:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(или из фрагмента):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Для идентификатора ресурса String вы можете назвать его так:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
и т.д...
Осторожно : если не удается найти идентификатор ресурса, возникает исключение RuntimeException. Обязательно правильно восстановить в продакшене.
static
из того, иначе getResources()
не получится.
Context
не был доступен. Исправление заключалось в том, чтобы удалить static
и переместить его в Context
(например, Activity
или Application
); или альтернативное исправление - это то, что Джонатан сделал в своем редакторе, который должен был передать Context
метод.
Еще один сценарий, с которым я столкнулся.
String imageName = "Hello", а затем, когда он передается в функцию getIdentifier в качестве первого аргумента, он передает имя с завершением строки нулем и всегда будет возвращать ноль. Передайте это imageName.substring (0, imageName.length () - 1)