Я хотів би зберігати ідентифікатор джерельних ресурсів у вигляді 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
Ви можете використовувати це для створення масиву інших ресурсів, таких як траси. Зауважте, що масив не повинен бути однорідним, тому ви можете створювати масив змішаних типів ресурсів, але ви повинні знати про те, що і де є типи даних у масиві.
<?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, який відображає шлях до ресурсу, що виводиться, використовуючи ресурс псевдоніма .
Подивіться, чи це працює, і, будь ласка, повідомте мене, якщо вам потрібна додаткова допомога.