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