首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用数组引用作为自定义android视图的XML属性

使用数组引用作为自定义android视图的XML属性
EN

Stack Overflow用户
提问于 2011-10-30 10:34:46
回答 1查看 18.8K关注 0票数 34

此问题已解决,详情请参阅备注。

我正在扩展现有的Android View并加载一些自定义属性,如Declaring a custom android UI element using XMLDefining custom attrs中所述。

布尔值和整数格式的属性可以很好地工作,但当我尝试指定对数组资源的引用时,应用程序在启动时崩溃。我在xml资源文件中定义了一个整数数组,并尝试将其用作自定义视图的属性。

我可以使用数组资源设置android微调器类的"entries“属性,因此这似乎是我的实现中的一个问题。logcat消息似乎没有提供任何关于崩溃的具体信息,但我仍在寻找,所以如果我发现了什么,我会更新的。

属性由(在attrs.xml中)声明:

代码语言:javascript
复制
<declare-styleable name="CustomView">
    <attr name="values" format="reference"/>
    <attr name="isActive" format="boolean"/>
</declare-styleable>

该数组定义为(在arrays.xml中):

代码语言:javascript
复制
<integer-array name="nums">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</integer-array>

并且我通过以下方式引用该数组:

代码语言:javascript
复制
<com.test.CustomView cv:values="@array/nums" />

这会导致应用程序立即崩溃。此外,如果我引用颜色资源而不是数组,则应用程序不会崩溃。有谁知道如何处理这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-03-11 14:43:22

这个问题是关于获取一个整数数组,对于我的例子,我需要从我的自定义视图的数组中读取颜色(Int),如下所示:

代码语言:javascript
复制
<declare-styleable name="ColorPickerView">
        <attr name="colors" format="reference" />
    </declare-styleable>

然后我使用我的自定义视图,如下所示:

代码语言:javascript
复制
<com.rainliu.colorpicker.ColorPickerView
    android:id="@+id/rtePalette"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    colorPickerView:colors="@array/colorPickerColors"
    />

颜色定义如下:

代码语言:javascript
复制
<resources>
    <color name="colorPrimary">#FF9800</color>
    <array name="colorPickerColors">
        <item>#000000</item>
        <item>#E65100</item>
        <item>@color/colorPrimary</item>
    </array>
</resources>

所以我需要在我的自定义视图(ColorPickerView)中获取颜色,代码如下:

代码语言:javascript
复制
TypedArray ta = context.obtainStyledAttributes(attributeSet, R.styleable.ColorPickerView);
int colorsId = ta.getResourceId(R.styleable.ColorPickerView_colors, 0);
int[] colorsArray = ta.getResources().getIntArray(colorsId);
for (int a : colorsArray) {
  Log.e("AA", "color == " + a);
}
ta.recycle();

下面是colorsArray的打印结果:

代码语言:javascript
复制
03-11 14:25:53.894 15300-15300/com.chinalwb.are E/AA: color == -16777216
03-11 14:25:53.894 15300-15300/com.chinalwb.are E/AA: color == -1683200
03-11 14:25:53.894 15300-15300/com.chinalwb.are E/AA: color == -1683200

希望这能对一些人有所帮助。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7942973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档