Получение всех ресурсов Drawable от объекта Ресурсов

В моем проекте Android я хочу циклично выполниться через весь набор Drawable ресурсы. Обычно, можно только получить определенный ресурс с помощью его идентификатора с помощью чего-то как:

InputStream is = Resources.getSystem().openRawResource(resourceId)

Однако я хочу получить все Drawable ресурсы, где я не буду знать их идентификатор заранее. Существует ли набор, который я могу циклично выполнить через, или возможно способ получить список идентификатора ресурса дал ресурсы в моем проекте?

Или, есть ли путь ко мне в Java для извлечения всех значений свойств из R.drawable статический класс?

22
задан Petter Friberg 24 August 2017 в 22:44
поделиться

3 ответа

Если вы обнаружите, что хотите это сделать, вы, вероятно, неправильно используете систему ресурсов. Взгляните на активы и AssetManager , если вы хотите перебирать файлы, включенные в ваш .apk.

5
ответ дан 29 November 2019 в 03:40
поделиться

Хорошо, это кажется немного взломанным, но это то, что я придумал с помощью 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, меня, возможно, не будет в курсе, я бы определенно хотел их увидеть!

33
ответ дан 29 November 2019 в 03:40
поделиться

Думаю, код отражения будет работать, но я не понимаю, зачем вам это нужно.

Ресурсы в Android статичны после установки приложения, поэтому вы можете иметь список ресурсов или массив. Что-то вроде:

<string-array name="drawables_list">
    <item>drawable1</item>
    <item>drawable2</item>
    <item>drawable3</item>
</string-array>

И из вашего Activity вы можете получить это, выполнив:

getResources().getStringArray(R.array.drawables_list);
3
ответ дан 29 November 2019 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: