Vorrei archiviare l'ID delle risorse estraibili sotto forma di R.drawable.*
all'interno di un array utilizzando un file di valori XML, quindi recuperare l'array nella mia attività.
Qualche idea su come raggiungere questo obiettivo?
Vorrei archiviare l'ID delle risorse estraibili sotto forma di R.drawable.*
all'interno di un array utilizzando un file di valori XML, quindi recuperare l'array nella mia attività.
Qualche idea su come raggiungere questo obiettivo?
Risposte:
Si utilizza un array tipizzato nel arrays.xml
file all'interno della /res/values
cartella che assomiglia a questo:
<?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>
Quindi, nella tua attività, accedi ad essi in questo modo:
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();
Nella value
cartella crea xml
il nome del file, arrays.xml
aggiunge i dati in questo modo
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
Quindi procuralo nel tuo codice in questo modo
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Quindi utilizzare uno Drawable
di questi come img
TypedArray
ad esempio come ImageView
background
utilizzare il seguente codice
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
dov'è index
l' Drawable
indice.
defaultValue
è un valore che dai se non ci sono articoli in questoindex
Per ulteriori informazioni su TypedArray
visitare questo link
http://developer.android.com/reference/android/content/res/TypedArray.html
Puoi usarlo per creare una matrice di altre risorse, come i disegni a disegno. Non è necessario che l'array sia omogeneo, quindi è possibile creare un array di tipi di risorse misti, ma è necessario conoscere quali e dove sono i tipi di dati nell'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>
E ottieni le risorse della tua attività in questo modo
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);
Godere!!!!!
Kotlin Way potrebbe essere questo:
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)
}
In Kotlin, puoi fare come: -
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Otterrai una matrice di immagini dalla risorsa come TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
ottenere l'ID risorsa dall'indice
imageArray.getResourceId(imageArray.getIndex(0),-1)
O è possibile impostare la risorsa di imageView sull'id
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
e infine riciclare l'array
imageArray.recycle()
Per quanto ne so, non è possibile memorizzare array in R.drawable.
Quello che puoi fare è creare un array in config.xml o strings.xml che associ un percorso a una risorsa disegnabile usando una risorsa alias .
Verifica se funziona e fammi sapere se hai bisogno di ulteriore aiuto.