Saya ingin menyimpan ID sumber daya yang dapat digambar dalam bentuk R.drawable.*
di dalam array menggunakan file nilai XML, dan kemudian mengambil array dalam aktivitas saya.
Adakah ide bagaimana mencapai ini?
Saya ingin menyimpan ID sumber daya yang dapat digambar dalam bentuk R.drawable.*
di dalam array menggunakan file nilai XML, dan kemudian mengambil array dalam aktivitas saya.
Adakah ide bagaimana mencapai ini?
Jawaban:
Anda menggunakan array yang diketik dalam arrays.xml
file di dalam /res/values
folder Anda yang terlihat seperti ini:
<?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>
Kemudian dalam aktivitas Anda, akses mereka seperti ini:
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();
Dalam value
folder buat xml
nama file itu arrays.xml
menambahkan data ke dalamnya dengan cara ini
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
Kemudian dapatkan ke kode Anda dengan cara ini
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Kemudian untuk menggunakan salah satu Drawable
dari ini img
TypedArray
misalnya sebagai ImageView
background
gunakan kode berikut
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
di mana index
adalah Drawable
indeks.
defaultValue
adalah nilai yang Anda berikan jika tidak ada item dalam hal iniindex
Untuk informasi lebih lanjut tentang TypedArray
kunjungi tautan ini
http://developer.android.com/reference/android/content/res/TypedArray.html
Anda dapat menggunakan ini untuk membuat array sumber daya lain, seperti drawables. Perhatikan bahwa array tidak harus homogen, sehingga Anda bisa membuat array tipe sumber daya campuran, tetapi Anda harus mengetahui apa dan di mana tipe data dalam array.
<?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>
Dan dapatkan sumber daya dalam aktivitas Anda seperti ini
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);
Nikmati!!!!!
Cara kotlin bisa seperti ini:
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)
}
Di Kotlin, Anda dapat melakukan sebagai: -
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Anda akan mendapatkan berbagai Gambar dari sumber sebagai TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
dapatkan ID sumber daya dengan indeks
imageArray.getResourceId(imageArray.getIndex(0),-1)
ATAU Anda dapat mengatur sumber daya imageView ke id
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
dan terakhir mendaur ulang array
imageArray.recycle()
Anda tidak dapat menyimpan array di R.drawable sejauh yang saya tahu.
Yang bisa Anda lakukan adalah membuat array di config.xml atau strings.xml yang memetakan jalur ke sumber daya yang dapat digambar dengan menggunakan sumber daya alias .
Lihat apakah ini berfungsi, dan beri tahu saya jika Anda memerlukan bantuan tambahan.