android - 引用形状内的颜色

时间:2012-06-22 14:37:56

标签: android themes

我想在形状内引用我自定义的颜色attr,它总是会导致错误。

首先我宣布attr:

<resources>
    <attr name="divider_color" format="color|reference" />
</resources>

在我的主题中,我声明了值:

 <style name="myTheme" parent="android:style/Theme.Dialog">
          <item name="divider_color">@color/red</item>
 </style>

如果我这样访问它,它可以正常工作:

 android:background="?divider_color"/>

但我想在形状中使用它:

<shape
    <gradient
        android:angle="0"
        android:centerColor="?divider_color"
        android:endColor="#00000000"
        android:startColor="#00000000"
        android:type="linear" />

</shape>

我收到此错误:

E / AndroidRuntime(3117):引起:java.lang.UnsupportedOperationException:无法转换为颜色:type = 0x2

知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

我不知道。所以我查看了该异常源自操作系统的位置:http://androidxref.com/4.0.4/xref/frameworks/base/core/java/android/content/res/TypedArray.java#326

307    public int getColor(int index, int defValue) {
308        index *= AssetManager.STYLE_NUM_ENTRIES;
309        final int[] data = mData;
310        final int type = data[index+AssetManager.STYLE_TYPE];
311        if (type == TypedValue.TYPE_NULL) {
312            return defValue;
313        } else if (type >= TypedValue.TYPE_FIRST_INT
314            && type <= TypedValue.TYPE_LAST_INT) {
315            return data[index+AssetManager.STYLE_DATA];
316        } else if (type == TypedValue.TYPE_STRING) {
317            final TypedValue value = mValue;
318            if (getValueAt(index, value)) {
319                ColorStateList csl = mResources.loadColorStateList(
320                        value, value.resourceId);
321                return csl.getDefaultColor();
322            }
323            return defValue;
324        }
325
326        throw new UnsupportedOperationException("Can't convert to color: type=0x"
327                + Integer.toHexString(type));
328    }

看起来'type'没有被正确解释。此方法认为您传入的类型为TYPE_ATTRIBUTE的属性,如here所示。这不能解决问题,但也许它可以帮助你缩小范围。

答案 1 :(得分:0)

答案 2 :(得分:0)

这是Android中的一个错误。这已在Lollipop中修复,因此应该在L&amp; M但是在以前的设备上会崩溃