在两个不同的 Activity 中,我想使用相同的渐变可绘制对象但颜色不同。 我想通过以下方式将渐变颜色引用到 Activity 主题:
我在 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>
在 Activity 主题中,我添加了
<item name="backgroundTopColor">#FFFFFFFF</item>
<item name="backgroundBottomColor">#FFFFFF00</item>
应用程序在 logcat 中启动后
02-07 14:03:59.479: ERROR/AndroidRuntime(2096): Caused by: java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
02-07 14:03:59.479: ERROR/AndroidRuntime(2096): at android.content.res.TypedArray.getColor(TypedArray.java:326)
02-07 14:03:59.479: ERROR/AndroidRuntime(2096): at android.graphics.drawable.GradientDrawable.inflate(GradientDrawable.java:647)
02-07 14:03:59.479: ERROR/AndroidRuntime(2096): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:788)
02-07 14:03:59.479: ERROR/AndroidRuntime(2096): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:729)
02-07 14:03:59.479: ERROR/AndroidRuntime(2096): at android.content.res.Resources.loadDrawable(Resources.java:1694)
02-07 14:03:59.479: ERROR/AndroidRuntime(2096): ... 29 more
我该如何解决这个问题?
谢谢
注意:API 级别 = 8
最佳答案
您应该使用 "?attr/backgroundTopColor"
而不是 "?backgroundTopColor"
来引用您的属性。
编辑:如果您间接引用颜色会怎样?而不是在你的主题中说:
<item name="backgroundTopColor">#FFFFFFFF</item>
你这样做:
<item name="backgroundTopColor">@color/myColor</item>
然后在 colors.xml 中,添加:
<color name="myColor">#FFFFFFFF</color>
我怀疑可能发生的情况是属性需要明确的颜色。至少,我完全按照您的概述做了,除了我总是间接引用颜色而不是将其直接放入我的主题中。
关于android - 重新使用具有主题相关颜色的渐变可绘制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4922381/