В моем проекте Android я хочу циклично выполниться через весь набор Drawable
ресурсы. Обычно, можно только получить определенный ресурс с помощью его идентификатора с помощью чего-то как:
InputStream is = Resources.getSystem().openRawResource(resourceId)
Однако я хочу получить все Drawable
ресурсы, где я не буду знать их идентификатор заранее. Существует ли набор, который я могу циклично выполнить через, или возможно способ получить список идентификатора ресурса дал ресурсы в моем проекте?
Или, есть ли путь ко мне в Java для извлечения всех значений свойств из R.drawable
статический класс?
Если вы обнаружите, что хотите это сделать, вы, вероятно, неправильно используете систему ресурсов. Взгляните на активы и AssetManager
, если вы хотите перебирать файлы, включенные в ваш .apk.
Хорошо, это кажется немного взломанным, но это то, что я придумал с помощью Reflection. (Обратите внимание, что resources
является экземпляром класса android.content.res.Resources
.)
final R.drawable drawableResources = new R.drawable();
final Class<R.drawable> c = R.drawable.class;
final Field[] fields = c.getDeclaredFields();
for (int i = 0, max = fields.length; i < max; i++) {
final int resourceId;
try {
resourceId = fields[i].getInt(drawableResources);
} catch (Exception e) {
continue;
}
/* make use of resourceId for accessing Drawables here */
}
Если у кого-то есть лучшее решение, которое лучше использует вызовы Android, меня, возможно, не будет в курсе, я бы определенно хотел их увидеть!
Думаю, код отражения будет работать, но я не понимаю, зачем вам это нужно.
Ресурсы в Android статичны после установки приложения, поэтому вы можете иметь список ресурсов или массив. Что-то вроде:
<string-array name="drawables_list">
<item>drawable1</item>
<item>drawable2</item>
<item>drawable3</item>
</string-array>
И из вашего Activity
вы можете получить это, выполнив:
getResources().getStringArray(R.array.drawables_list);