Хранение R. drawable IDs в XML-массиве


Я хотел бы сохранить идентификатор drawable resources в виде R.drawable.* внутри массива с помощью XML-файла значений, а затем получить массив в моей деятельности.

есть идеи, как этого добиться?

4 133

4 ответа:

использовать типизированный массив на выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <integer-array name="random_imgs">
        <item>@drawable/car_01</item>
        <item>@drawable/balloon_random_02</item>
        <item>@drawable/dog_03</item>
    </integer-array>

</resources>

тогда в вашей деятельности, доступ к ним так:

TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);

// get resource ID by index
imgs.getResourceId(i, -1)

// or set you ImageView's resource to the id
mImgView1.setImageResource(imgs.getResourceId(i, -1));

// recycle the array
imgs.recycle();

на создать xml имя файла arrays.xml добавьте данные к нему таким образом

<integer-array name="your_array_name">
    <item>@drawable/1</item>
    <item>@drawable/2</item>
    <item>@drawable/3</item>
    <item>@drawable/4</item>
</integer-array>

затем получить его в свой код таким образом

private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);

затем использовать Drawable на imgTypedArray например как ImageViewbackground использовать следующий код

ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));

здесь index - это . defaultValue это значение, которое вы даете, если нет элемента в этом index

для получения дополнительной информации о TypedArray перейдите по этой ссылке http://developer.android.com/reference/android/content/res/TypedArray.html

вы можете использовать это для создания массива других ресурсов, таких как чертежи. Обратите внимание, что массив не обязательно должен быть однородным, поэтому вы можете создать массив смешанных типов ресурсов, но вы должны знать, что и где находятся типы данных в массиве.

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/settings</item>
        <item>@drawable/logout</item>
    </array>
    <array name="colors">
        <item>#FFFF0000</item>
        <item>#FF00FF00</item>
        <item>#FF0000FF</item>
    </array>
</resources>

и получить ресурсы в вашей деятельности, как это

Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);

TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);

наслаждайтесь!!!!!

вы не можете хранить массивы в R. drawable, насколько я знаю.

Что вы можете сделать, это создать массив в config.XML или строки.xml, который отображает путь к привлекаемому ресурсу с помощью псевдоним ресурсов.

посмотреть, если это работает, и, пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.