Я хотел бы сохранить идентификатор пригодных ресурсов в форме 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 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)
}
Вы не можете хранить массивы в R.drawable, насколько я знаю.
Что вы можете сделать, так это создать массив в файле config.xml или strings.xml, который отображает путь к ресурсу с возможностью рисования с помощью ресурса псевдонима.
Посмотрите, работает ли это, и, пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.