Chciałbym przechowywać identyfikator zasobów do rysowania w postaci R.drawable.*wewnątrz tablicy przy użyciu pliku wartości XML, a następnie pobrać tablicę w mojej aktywności.
Jakieś pomysły, jak to osiągnąć?
Chciałbym przechowywać identyfikator zasobów do rysowania w postaci R.drawable.*wewnątrz tablicy przy użyciu pliku wartości XML, a następnie pobrać tablicę w mojej aktywności.
Jakieś pomysły, jak to osiągnąć?
Odpowiedzi:
Używasz wpisanej tablicy w arrays.xmlpliku w swoim /res/valuesfolderze, która wygląda następująco:
<?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>
Następnie w swojej aktywności uzyskaj do nich dostęp w następujący sposób:
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();
W valuefolderze utwórz xmlnazwę pliku arrays.xml
w ten sposób dodaje do niego dane
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
Następnie uzyskaj go do swojego kodu w ten sposób
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Następnie, aby użyć Drawablez nich img TypedArrayna przykład jako ImageView backgroundużyj następującego kodu
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
gdzie indexjest Drawableindeks.
defaultValueto wartość, którą podajesz, jeśli nie ma w tym pozycjiindex
Aby uzyskać więcej informacji na temat, TypedArrayodwiedź ten link
http://developer.android.com/reference/android/content/res/TypedArray.html
Możesz użyć tego do stworzenia szeregu innych zasobów, takich jak przedmioty do rysowania. Zauważ, że tablica nie musi być jednorodna, więc możesz utworzyć tablicę mieszanych typów zasobów, ale musisz wiedzieć, jakie i gdzie typy danych znajdują się w tablicy.
<?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>
I zdobądź zasoby w swojej działalności w ten sposób
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);
Cieszyć się!!!!!
sposób kotlin mógłby być taki:
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)
}
W Kotlinie możesz: -
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Otrzymasz tablicę Image z zasobu jako TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
pobierz identyfikator zasobu przez indeks
imageArray.getResourceId(imageArray.getIndex(0),-1)
LUB możesz ustawić zasób imageView na id
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
i na koniec ponownie przetworzyć tablicę
imageArray.recycle()
O ile wiem, nie możesz przechowywać tablic w R.drawable.
To, co możesz zrobić, to utworzyć tablicę w config.xml lub strings.xml, która odwzorowuje ścieżkę do zasobu do rysowania przy użyciu zasobu aliasu .
Sprawdź, czy to zadziała, i daj mi znać, jeśli potrzebujesz dodatkowej pomocy.