描画可能なリソースのIDをR.drawable.*
XML値ファイルを使用して配列内の形式で保存し、アクティビティで配列を取得したいと考えています。
これを達成する方法のアイデアはありますか?
描画可能なリソースのIDをR.drawable.*
XML値ファイルを使用して配列内の形式で保存し、アクティビティで配列を取得したいと考えています。
これを達成する方法のアイデアはありますか?
回答:
次のように、フォルダー内のファイルで型指定された配列を使用しarrays.xml
ます/res/values
。
<?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)
}
Kotlinでは、次のように実行できます。
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
リソースから画像の配列を取得します TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
インデックスからリソースIDを取得する
imageArray.getResourceId(imageArray.getIndex(0),-1)
または、imageViewのリソースをIDに設定できます
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
そして最後にアレイをリサイクルします
imageArray.recycle()
私が知る限り、配列をR.drawableに格納することはできません。
できることは、エイリアスリソースを使用して、パスを描画可能なリソースにマップする配列をconfig.xmlまたはstrings.xmlに作成することです。
これが機能するかどうかを確認し、さらにサポートが必要な場合はお知らせください。