web-dev-qa-db-fra.com

Stockage d'ID R.drawables dans un tableau XML

Je souhaite stocker l'ID des ressources pouvant être extraites sous la forme de R.drawable.* à l'intérieur d'un tableau à l'aide d'un fichier de valeurs XML, puis récupérez le tableau dans mon activité.

Des idées sur la façon de réaliser cela?

141
gammaraptor

Vous utilisez un tableau typé dans arrays.xml fichier dans 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>

Ensuite, dans votre activité, accédez-y comme suit:

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();
347
Patrick Kafka

Dans le dossier value, créez le fichier xml nommé arrays.xml y ajouter les données de cette façon

<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 l'obtenir à votre code de cette façon

private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);

Utilisez ensuite le code suivant: Drawable dans le imgTypedArray, par exemple ImageViewbackground

ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));

index est l'index Drawable. defaultValue est une valeur que vous donnez s'il n'y a pas d'élément à ce index

Pour plus d'informations sur TypedArray visitez ce lien http://developer.Android.com/reference/Android/content/res/TypedArray.html

30
ahmed ghanayem

Vous pouvez l’utiliser pour créer un tableau d’autres ressources, telles que drawables. Notez qu'il n'est pas nécessaire que le tableau soit homogène. Vous pouvez donc créer un tableau de types de ressources mixtes, mais vous devez savoir quels types de données se trouvent dans le tableau et à quel endroit.

 <?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);

Prendre plaisir!!!!!

14
yubaraj poudel

façon kotlin pourrait être ceci:

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)
}
0
Jan Rabe