我想在形状内引用我自定义的颜色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
知道如何解决这个问题吗?
答案 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但是在以前的设备上会崩溃