XML値ファイルを使用して配列内にR.drawable.*
の形式で描画可能なリソースのIDを保存し、アクティビティで配列を取得したいと思います。
これを達成する方法のアイデアはありますか?
次のような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();
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);
次に、Drawable
img
でこれらのうちTypedArray
を使用するには、たとえばImageView
background
として次のコードを使用します。
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
ここで、index
はDrawable
インデックスです。 defaultValue
は、このindex
にアイテムがない場合に指定する値です
TypedArray
の詳細については、このリンクにアクセスしてください http://developer.Android.com/reference/Android/content/res/TypedArray.html
これを使用して、ドロアブルなどの他のリソースの配列を作成できます。配列は同種である必要はないため、混合リソースタイプの配列を作成できますが、配列内のデータタイプがどこにあるかを認識する必要があります。
<?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);
楽しい!!!!!
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)
}