Я хотел бы сохранить идентификатор R.drawable.*
извлекаемых ресурсов в виде внутри массива, используя файл значений XML, а затем получить массив в моей деятельности.
Есть идеи как этого добиться?
Я хотел бы сохранить идентификатор R.drawable.*
извлекаемых ресурсов в виде внутри массива, используя файл значений XML, а затем получить массив в моей деятельности.
Есть идеи как этого добиться?
Ответы:
Вы используете типизированный массив в arrays.xml
файле внутри вашей /res/values
папки, который выглядит следующим образом:
<?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();
В value
папке создать 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
их, img
TypedArray
например, в качестве ImageView
background
следующего кода
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
где index
есть Drawable
индекс.
defaultValue
это значение, которое вы даете, если в этом нет элементаindex
Для получения дополнительной информации TypedArray
посетите эту ссылку
http://developer.android.com/reference/android/content/res/TypedArray.html
Вы можете использовать это для создания массива других ресурсов, таких как drawables. Обратите внимание, что массив не обязательно должен быть однородным, поэтому вы можете создать массив смешанных типов ресурсов, но вы должны знать, что и где типы данных находятся в массиве.
<?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);
Наслаждаться!!!!!
Кстати, может быть так:
fun Int.resDrawableArray(context: Context, index: Int, block: (drawableResId: Int) -> Unit) {
val array = context.resources.obtainTypedArray(this)
block(array.getResourceId(index, -1))
array.recycle()
}
R.array.random_imgs.resDrawableArray(context, 0) {
mImgView1.setImageResource(it)
}
В Котлине вы можете сделать так:
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Вы получите массив изображений из ресурса как TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
получить идентификатор ресурса по индексу
imageArray.getResourceId(imageArray.getIndex(0),-1)
ИЛИ вы можете установить ресурс imageView для идентификатора
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
и в последнем перерабатывать массив
imageArray.recycle()
Насколько я знаю, вы не можете хранить массивы в R.drawable.
Что вы можете сделать, это создать массив в config.xml или strings.xml, который отображает путь к ресурсу для рисования с использованием ресурса псевдонима .
Посмотрите, работает ли это, и, пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.