Je souhaite stocker l'ID des ressources dessinables sous la forme de R.drawable.* un tableau à l'aide d'un fichier de valeurs XML, puis récupérer le tableau dans mon activité.
Des idées pour y parvenir?
Je souhaite stocker l'ID des ressources dessinables sous la forme de R.drawable.* un tableau à l'aide d'un fichier de valeurs XML, puis récupérer le tableau dans mon activité.
Des idées pour y parvenir?
Réponses:
Vous utilisez un tableau tapé dans le arrays.xmlfichier de votre /res/valuesdossier qui ressemble à ceci:
<?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>
Puis dans votre activité, accédez-y comme ceci:
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();
Dans le valuedossier, créez xmlun nom de fichier, arrays.xml
ajoutez-y les données de cette manière
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
Ensuite, obtenez-le dans votre code de cette façon
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Ensuite, pour utiliser l'un Drawablede ces éléments dans le, img TypedArraypar exemple, ImageView backgroundutilisez le code suivant
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
où indexest l' Drawableindex.
defaultValueest une valeur que vous donnez s'il n'y a pas d'article à ceciindex
Pour plus d'informations sur, TypedArrayvisitez ce lien
http://developer.android.com/reference/android/content/res/TypedArray.html
Vous pouvez l'utiliser pour créer un tableau d'autres ressources, telles que des tableaux. Notez que le tableau ne doit pas nécessairement être homogène, vous pouvez donc créer un tableau de types de ressources mixtes, mais vous devez être conscient de la nature et de l'emplacement des types de données dans le tableau.
<?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>
Et obtenez les ressources de votre activité comme ça
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);
Prendre plaisir!!!!!
La façon kotlin pourrait être la suivante:
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)
}
Dans Kotlin, vous pouvez faire comme: -
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Vous obtiendrez un tableau d'images de la ressource comme TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
obtenir l'ID de ressource par l'index
imageArray.getResourceId(imageArray.getIndex(0),-1)
OU vous pouvez définir la ressource d'imageView sur l'ID
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
et en dernier recycler le tableau
imageArray.recycle()
Vous ne pouvez pas stocker de tableaux dans R.drawable pour autant que je sache.
Ce que vous pouvez faire est de créer un tableau dans config.xml ou strings.xml qui mappe un chemin vers une ressource dessinable à l'aide d'une ressource d'alias .
Voyez si cela fonctionne et faites-le moi savoir si vous avez besoin d'aide supplémentaire.