我发现自己希望创建Android似乎本不支持的值的xml数组,并且正在寻找解决此问题的一些方法。当前,如果你希望在XML中声明一个值的数组,你仅限于字符串,整数和一个通用的非类型化“数组”,但我真正想要的是能够有参考ID数组。颜色,尺寸等。类似以下内容:在Android中声明维数,颜色,资源ID或其他非标准数据类型的数组?
@dimen/someSize1
@dimen/someSize2
@dimen/someSize3
@color/red
@color/green
@color/blue
或者作为一个伸展目标,能够声明原始维度/颜色,而不仅仅是引用。
不幸的是,似乎没有一个好的方法来实际做到这一点,我可以找到。我可以访问阵列
Resources resources = context.getResources();
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyClass, defStyle, 0);
int sizesid = array.getResourceId(R.styleable.MyClass_sizes, defaultId);
int colorsid = array.getResourceId(R.styleable.MyClass_colors, defaultId);
这是所有有效,我也得到实际有效的int数组时,我用这些ID来检索数组,像这样
int[] colorIds = resources.getIntArray(colorsid);
的问题是,这些整数不能如果我想解析实际的颜色或尺寸,可以用作有效的参考ID。
resources.getColor(colorIds[0]); // Throws Resource NotFoundException
有什么办法可以将int转换为实际有效的资源ID引用吗?我认为这就是为什么资源具有单独的getDimension/getInteger/getIdentifier。
编辑:这里的目标是引用从我在适当的attrs.xml所定义的自定义的xmlns PARAMS这些阵列,使他们可以包含在XML布局文件,像这样:
xmlns:custom="http://schemas.android.com/apk/res-auto"
custom:sizes="@array/sizes"
custom:colors="@array/colors" />
这就是为什么我的示例使用context.obtainStyledAttributes获取TypedArray对象,以及为什么我使用R.styleable.foo资源来访问其值。我发现字符串数组工作得很好。问题是这些参考ID数组(或者复杂颜色/维数组),并且当我访问它们时,它们看起来并不包含有意义的值。
+0
可能是重复的http://stackoverflow.com/questions/4326037/android-资源阵列/ 43462518#43462518 –