Je voudrais stocker l'ID des ressources dessinables sous la forme de R.drawable.*
dans un tableau en utilisant un fichier de valeurs XML, et ensuite récupérer le tableau dans mon activité.
Avez-vous une idée de la manière d'y parvenir ?
Je voudrais stocker l'ID des ressources dessinables sous la forme de R.drawable.*
dans un tableau en utilisant un fichier de valeurs XML, et ensuite récupérer le tableau dans mon activité.
Avez-vous une idée de la manière d'y parvenir ?
Vous utilisez un tableau typé sur arrays.xml
dans votre fichier /res/values
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>
Ensuite, dans votre activité, accédez-y comme suit :
TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);
// get resource ID by index, use 0 as default to set null resource
imgs.getResourceId(i, 0)
// or set you ImageView's resource to the id
mImgView1.setImageResource(imgs.getResourceId(i, 0));
// recycle the array
imgs.recycle();
DefValue - Valeur à renvoyer si l'attribut n'est pas défini ou n'est pas une ressource. Je suis presque sûr que l'imageview sera vide si elle doit utiliser la valeur par défaut -1. [developer.Android.com/reference/Android/content/res/](http://developer.android.com/reference/android/content/res/TypedArray.html#getResourceId(int) , int)
Dans le value
création du dossier xml
le nom du 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>
Puis obtenez-le dans votre code de cette façon
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Ensuite, pour utiliser un Drawable
de ces derniers dans le img
TypedArray
par exemple en tant que ImageView
background
utiliser le code suivant
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
où index
est le Drawable
l'index. defaultValue
est une valeur que vous donnez s'il n'y a pas d'article à cet endroit. index
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 éléments graphiques. Notez que le tableau n'a pas besoin d'ê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 dans votre activité comme ceci
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);
Enjoy !!!!!
En Kotlin, vous pouvez faire comme suit :-.
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
Vous obtiendrez un tableau d'images à partir de la ressource en tant que TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
obtenir l'ID de la ressource par l'index
imageArray.getResourceId(imageArray.getIndex(0),-1)
OU vous pouvez définir la ressource de imageView à l'id
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
et enfin recycler le tableau
imageArray.recycle()
La voie kotlin pourrait être celle-ci :
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)
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Pouvez-vous préciser ce que vous entendez par "à l'intérieur d'un tableau en utilisant XML" ?
0 votes
Un fichier de valeurs. par exemple, strings.xml
1 votes
Je ne comprends pas pourquoi vous voulez faire cela. Pourriez-vous nous en dire un peu plus sur les raisons pour lesquelles vous voulez procéder de cette façon ?
0 votes
On dirait que vous essayez de faire quelque chose de bien plus compliqué que nécessaire.
4 votes
Ce que j'essaie de faire, c'est de stocker l'identifiant des images qui seront affichées dans une liste.