Відповіді:
Щось таке:
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()
є методами діяльності.
Ви також можете спробувати це:
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
Приклад ресурсу публічної системи:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
Інший спосіб - направити документацію на клас android.R.dravable .
Ви можете використовувати цю функцію для отримання ідентифікатора ресурсу:
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)
}
}
Отже, якщо ви хочете отримати ідентифікатор ресурсу, який можна отримати , ви можете викликати такий спосіб:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(або з фрагмента):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
Для ідентифікатора рядкового рядка ви можете назвати його так:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
тощо ...
Обережно : він кидає RuntimeException, якщо не вдається знайти ідентифікатор ресурсу. Не забудьте належним чином відновити виробництво.
static
з цього, інакше getResources()
не вийде.
Context
був недоступний. Виправлення було або видалити static
і перемістити його в Context
(наприклад, Activity
або Application
); або альтернативне виправлення - це те, що зробив Джонатан у своїй редакції, а це перейти Context
до методу.
Ще один сценарій, з яким я стикався.
String imageName = "Привіт", і тоді, коли він буде переданий у функцію getIdentifier як перший аргумент, він передасть ім'я із завершенням нульового рядка і завжди поверне нуль. Передайте це зображенняName.substring (0, imageName.length () - 1)