在Android中声明维度、颜色、资源ID或其他非标准数据类型的数组?

在Android中声明维度、颜色、资源ID或其他非标准数据类型的数组?,android,xml,android-resources,typed-arrays,Android,Xml,Android Resources,Typed Arrays,我发现自己希望创建Android本机似乎不支持的xml值数组,并且正在寻找一些解决这个问题的方法 目前,如果您希望在XML中声明一个值数组,那么只能使用字符串、整数和一个通用的非类型“数组”,但我真正希望的是能够拥有指向颜色、尺寸等的引用ID数组。如下所示: <?xml version="1.0" encoding="utf-8"?> <resources> <array name="sizes"> <item>@dimen

我发现自己希望创建Android本机似乎不支持的xml值数组,并且正在寻找一些解决这个问题的方法

目前,如果您希望在XML中声明一个值数组,那么只能使用字符串、整数和一个通用的非类型“数组”,但我真正希望的是能够拥有指向颜色、尺寸等的引用ID数组。如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="sizes">
        <item>@dimen/someSize1</item>
        <item>@dimen/someSize2</item>
        <item>@dimen/someSize3</item>
    </array>
    <array name="colors">
        <item>@color/red</item>
        <item>@color/green</item>
        <item>@color/blue</item>
    </array>
</resources>
这都是有效的,当我使用这些ID检索数组时,我得到了实际有效的int数组

int[] colorIds = resources.getIntArray(colorsid); 
问题是,如果我想解析实际的颜色或dimen,这些整数不能用作有效的引用ID

resources.getColor(colorIds[0]); // Throws Resource NotFoundException
有没有办法将int转换为实际有效的资源ID引用?我假设这就是为什么资源有单独的getDimension/getInteger/getIdentifier


编辑:这里的目标是从我在适当的attrs.xml中定义的自定义xmlns参数中引用这些数组,以便它们可以包含在xml布局文件中,如下所示:

<com.example.MyClass
     xmlns:custom="http://schemas.android.com/apk/res-auto"
     custom:sizes="@array/sizes"
     custom:colors="@array/colors" />


这就是为什么我的示例使用context.acceptainstyledattributes来获取TypedArray对象,以及为什么我使用R.styleable.foo资源来访问它的值。我发现字符串数组工作得很好。问题是这些引用ID数组(或复杂颜色/维度数组),当我访问它们时,它们似乎不包含有意义的值。

我100%肯定您可以完全按照您已经尝试过的方法执行操作。我知道这一点,因为我以前用过。更具体地说,是字符串ID的数组。然而,您的问题在于当您试图检索它们时。将其保留为
类型Darray
,并使用
.getResourceId
,传入索引和默认ID以防出现问题

我在适配器中使用的是
getString(mTypedArray.getResourceId(位置,0))
。当它寻找索引时,您正在做的是传递一个ID(错误)

编辑:为了进一步澄清,当我检索我的TypedArray时,我会这样做:


getResources().obtainTypedArray(R.array.name\u of\u array)

您好!我不是不理你,我只是一直忙着其他的工作。我会尽快回复这个问题和您的答案。当我以R.styleable.MyClass_大小的形式传递id时,这些id实际上是数组位置。这可能并不明显,但我所做的是创建自定义xmlns属性,以便在自定义xml属性中引用这些数组。。。但是,你的例子也谈到了获取字符串,这对我来说很有用。我对颜色和尺寸有意见。我刚看到你的编辑。我想我知道你现在想要实现什么。您是否试图在XML中为自定义视图提供几乎可以自动完成的大小和颜色?对于autocomplete,情况并非如此,但我想在XML中声明,该视图/布局子类的实例应该引用复杂值(如颜色和尺寸)的数组,理想情况下,这些数组包含对颜色/尺寸的引用,以便从适当的res文件夹中选择正确的颜色/尺寸。我们可以看到您的
attrs.xml
?具体来说,它是否有这样的功能:
。如果是这样的话,你可能想换一种不同的方式。不要将数组ID放在xml中,而是使用枚举并将其限制在您需要的选择(“大尺寸”、“蓝色”或您如何澄清这两种颜色)。然后,在您的自定义视图中,检查并将它们设置为适当的数组,您应该能够从资源中提取该数组。可能是重复的@Bill it's not。
<com.example.MyClass
     xmlns:custom="http://schemas.android.com/apk/res-auto"
     custom:sizes="@array/sizes"
     custom:colors="@array/colors" />