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.xml
pliku w swoim /res/values
folderze, 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 value
folderze utwórz xml
nazwę 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ć Drawable
z nich img
TypedArray
na przykład jako ImageView
background
użyj następującego kodu
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
gdzie index
jest Drawable
indeks.
defaultValue
to wartość, którą podajesz, jeśli nie ma w tym pozycjiindex
Aby uzyskać więcej informacji na temat, TypedArray
odwiedź 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.