在 XML 数组中存储可绘制的 ID

我希望使用 XML 值文件将可绘制资源的 ID 以 R.drawable.*的形式存储在一个数组中,然后在活动中检索该数组。

有什么办法吗?

94055 次浏览

/res/values文件夹内的 arrays.xml文件中使用如下 类型化数组:

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

您可以使用它来创建其他资源的数组,例如绘图。注意,数组不需要是同构的,因此您可以创建一个混合资源类型的数组,但是您必须知道数组中的数据类型是什么以及在什么位置。

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

好好享受吧!

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

然后使用 img TypedArray中的 Drawable作为 ImageView background,例如使用以下代码

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

其中 indexDrawable指数。 如果此 index处没有项目,则给出 defaultValue

有关 TypedArray的更多信息,请访问这个链接 Http://developer.android.com/reference/android/content/res/typedarray.html

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的形式从资源获得 Image 数组

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