这个题目比较绕,下面先来解释一下:
array.xml文件如下:
<integer-array name="myArray">
<item>@drawable/pic1</item>
<item>@drawable/pic2</item>
<item>@drawable/pic3</item>
<item>@drawable/pic4</item>
</integer-array>
一般我们在程序中这么使用:
int[] picArray = getResources().getIntArray(R.array.myArray);
我们期待拿到的是:
R.drawable.pic1, R.drawable.pic2,R.drawable.pic3,R.drawable.pic4
但是这样拿到的却是0,0,0,0
这种情况在自定义View的时候也会被使用到。
那么怎么解决呢,其实很简单,看代码:
int[] picArray = new int[4];
for (int i = 1; i <=4; i++)
{
try
{
Class res = R.drawable.class;
Field field = res.getField("pic"+i);
picArray[i-1] = field.getInt(null);
}
catch (Exception e)
{
Log.e("MyTag", "Failure to get drawable id.", e);
}
}
安装惯例,这种方法只是笨方法,
以下方法才是大招:
TypedArray ar = context.getResources().obtainTypedArray(R.array.myArray);
int len = ar.length();
int[] picArray = new int[len];
for (int i = 0; i < len; i++)
picArray[i] = ar.getResourceId(i, 0);
ar.recycle();
for (int i = 0; i < len; i++)
Log.v (TAG, "Res Id " + i + " is " + Integer.toHexString(picArray[i]));