3

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

我在 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:错误/AndroidRuntime(2096):原因:java.lang.UnsupportedOperationException:无法转换为颜色:type=0x2
02-07 14:03:59.479:错误/AndroidRuntime(2096) : 在 android.content.res.TypedArray.getColor(TypedArray.java:326)
02-07 14:03:59.479: 错误/AndroidRuntime(2096): 在 android.graphics.drawable.GradientDrawable.inflate(GradientDrawable.java:647 )
02-07 14:03:59.479: 错误/AndroidRuntime(2096): 在 android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:788)
02-07 14:03:59.479: 错误/AndroidRuntime(2096):在 android.graphics.drawable.Drawable.createFromXml(Drawable.java:729)
02-07 14:03:59.479: 错误/AndroidRuntime(2096): 在 android.content.res.Resources.loadDrawable(Resources.java:1694)
02-07 14:03:59.479: 错误/AndroidRuntime(2096): ... 29 更多

我该如何解决这个问题?

谢谢

注意:API 级别 = 8

4

1 回答 1

0

您应该使用"?attr/backgroundTopColor"而不是"?backgroundTopColor"引用您的属性。

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

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

你来做这件事:

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

然后在 colors.xml 中,添加:

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

我怀疑可能发生的事情是该属性需要一个明确的颜色。至少,我已经完全按照你的大纲做了,除了我总是间接引用颜色而不是把它放在我的主题中。

于 2011-02-07T14:33:39.370 回答