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.xml
fichier de votre /res/values
dossier 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 value
dossier, créez xml
un 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 Drawable
de ces éléments dans le, img
TypedArray
par exemple, ImageView
background
utilisez le code suivant
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
où index
est l' Drawable
index.
defaultValue
est une valeur que vous donnez s'il n'y a pas d'article à ceciindex
Pour plus d'informations sur, TypedArray
visitez 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.