web-dev-qa-db-ja.com

R.drawable IDをXML配列に保存する

XML値ファイルを使用して配列内にR.drawable.*の形式で描画可能なリソースのIDを保存し、アクティビティで配列を取得したいと思います。

これを達成する方法のアイデアはありますか?

141
gammaraptor

次のようなarrays.xmlフォルダー内の/res/valuesファイルで typed array を使用します。

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

次に、アクティビティで次のようにアクセスします。

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

valueフォルダーにxmlファイル名を作成し、arrays.xmlこの方法でデータを追加します

<integer-array name="your_array_name">
    <item>@drawable/1</item>
    <item>@drawable/2</item>
    <item>@drawable/3</item>
    <item>@drawable/4</item>
</integer-array>

次に、この方法でコードに取得します

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

次に、DrawableimgでこれらのうちTypedArrayを使用するには、たとえばImageViewbackgroundとして次のコードを使用します。

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

ここで、indexDrawableインデックスです。 defaultValueは、このindexにアイテムがない場合に指定する値です

TypedArrayの詳細については、このリンクにアクセスしてください http://developer.Android.com/reference/Android/content/res/TypedArray.html

30
ahmed ghanayem

これを使用して、ドロアブルなどの他のリソースの配列を作成できます。配列は同種である必要はないため、混合リソースタイプの配列を作成できますが、配列内のデータタイプがどこにあるかを認識する必要があります。

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

そして、あなたの活動でこのようなリソースを入手してください

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

楽しい!!!!!

14
yubaraj poudel

kotlinの方法は次のようになります。

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