2012-06-22 42 views
2

我想引用我自定義的顏色屬性attr,並且它總是導致錯誤。android - 引用形狀內的顏色

首先我聲明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:由造成無法轉換爲彩色:類型= 0X2

任何想法如何解決這個?

回答

0

我不知道。所以,我簽出了該異常是源於OS: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_ATTRIBUTE的屬性,如here所示。這並不能回答問題,但也許它可以幫助你縮小範圍。

0

這是Android的一個bug。這已在Lollipop中修復,所以應該在L & M上工作,但在之前的設備上它會崩潰