重新使用渐变可绘制与主题相关的颜色

时间:2011-02-07 14:26:33

标签: android colors gradient drawable attr

在两个不同的活动中,我想使用相同的渐变可绘制但具有不同的颜色。 我想按照以下方式将渐变颜色引用到活动主题:

我在attrs.xml中添加了跟随行

<attr name="backgroundTopColor" format="color" />
<attr name="backgroundBottomColor" format="color" />
在我输入的bg_gradient.xml中

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient 
        android:startColor="?backgroundTopColor" 
        android:endColor="?backgroundBottomColor" 
        android:angle="270" />
    <corners android:radius="0dp" />
</shape>

在活动主题中,我添加了

<item name="backgroundTopColor">#FFFFFFFF</item>
<item name="backgroundBottomColor">#FFFFFF00</item>

在logcat中启动应用程序后

  

02-07 14:03:59.479:ERROR / AndroidRuntime(2096):引起:java.lang.UnsupportedOperationException:无法转换为颜色:type = 0x2
  02-07 14:03:59.479:ERROR / AndroidRuntime(2096):在android.content.res.TypedArray.getColor(TypedArray.java:326)
  02-07 14:03:59.479:ERROR / AndroidRuntime(2096):在android.graphics.drawable.GradientDrawable.inflate(GradientDrawable.java:647)
  02-07 14:03:59.479:ERROR / AndroidRuntime(2096):在android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:788)
  02-07 14:03:59.479:ERROR / AndroidRuntime(2096):在android.graphics.drawable.Drawable.createFromXml(Drawable.java:729)
  02-07 14:03:59.479:ERROR / AndroidRuntime(2096):在android.content.res.Resources.loadDrawable(Resources.java:1694)
  02-07 14:03:59.479:ERROR / AndroidRuntime(2096):... 29更多

我如何解决这个问题?

谢谢

注意:API级别= 8

1 个答案:

答案 0 :(得分:0)

您应该使用"?attr/backgroundTopColor"代替"?backgroundTopColor"来引用您的属性。

编辑:如果您间接引用颜色会发生什么?而不是在你的主题中说:

<item name="backgroundTopColor">#FFFFFFFF</item>

你这样做:

<item name="backgroundTopColor">@color/myColor</item>

然后在colors.xml中添加:

<color name="myColor">#FFFFFFFF</color>

我怀疑可能发生的是该属性期待一种明确的颜色。至少,我已经完成了你的轮廓,除了我总是间接地引用颜色而不是把它放到我的主题中。