2011-03-18 107 views
53

我在我的res/drawable文件夹中有一些图像。比方说img1.png, img2.pngimg3.png。我目前正在创建这些图像ID的整数数组在Java中这样创建资源ID的整数数组

int[] imgIds = {R.drawable.img1, R.drawable.img2, R.drawable.img3}; 

取而代之的,是有可能创造的res/values文件中的一个(比如说strings.xml)整数数组这样

<integer-array name="img_id_arr"> 
    <item>@drawable/img1</item> 
    <item>@drawable/img2</item> 
    <item>@drawable/img3</item> 
</integer-array> 

然后通过getResources().getIntArray(R.array.img_id_arr)在Java中访问它?

回答

60

仅使用“数组”而不是“整数数组”。请参阅开发人员指南中的Typed Array

+0

工作。谢谢。 – 2011-03-19 00:28:21

+0

这似乎为可绘而不是风格,例如工作: <数组名称= “主题”> @android:风格/主题 @android:风格/ Theme.Light @android:风格/ Theme.Holo @android:风格/ Theme.Holo.Light 这怎么行,为可绘其它资源ID一旁? – toobsco42 2012-09-13 04:33:01

+0

据我所知,我认为是创建一个int数组来表示预编译的值本身,而不是它表示的值。如果有人有任何想法,这是值得欢迎的。 – AlexSanchez 2014-10-31 22:32:47

1

制作一个LevelListDrawable。虽然它不完全是你想要的,但几乎可以实现。

+0

非常优雅,非常被低估的解决方案。 – Tobias 2017-02-22 16:16:08

44

XML integer array, resource references, getIntArray

TypedArray ar = context.getResources().obtainTypedArray(R.array.my_array); 
int len = ar.length(); 
int[] resIds = new int[len]; 
for (int i = 0; i < len; i++) 
    resIds[i] = ar.getResourceId(i, 0); 
ar.recycle(); 
// Do stuff with resolved reference array, resIds[]... 
for (int i = 0; i < len; i++) 
    Log.v (TAG, "Res Id " + i + " is " + Integer.toHexString(resIds[i])); 
+0

是否可以获取对资源而不是数组的单个引用?我需要它,以防我想检查2个资源ID是否相等。 – 2013-04-04 14:11:18