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

发布于 2024-10-16 08:58:57 字数 1622 浏览 4 评论 0原文

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

<attr name="backgroundTopColor" format="color" />
<attr name="backgroundBottomColor" format="color" />

在 bg_gradient.xml 中的 attrs.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

In two different activities I want to use same gradient drawable but with different colors.
I think to refer gradient colors to activity theme in follow way:

I've added follow rows in attrs.xml

<attr name="backgroundTopColor" format="color" />
<attr name="backgroundBottomColor" format="color" />

in bg_gradient.xml I typed

<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>

In activity theme, I've added

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

After application start in 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

How I can solve this?

Thank you

NB: API level = 8

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小嗲 2024-10-23 08:58:57

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

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

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

你这样做:

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

然后在colors.xml中,你添加:

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

我怀疑可能发生的情况是该属性期望显式颜色。至少,我已经完全按照您的概述进行了操作,只是我总是间接引用颜色而不是将其直接放入我的主题中。

You should use "?attr/backgroundTopColor" instead of "?backgroundTopColor" to reference your attributes.

Edit: What happens if you indirectly reference the color? Instead of in your theme saying:

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

You do this:

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

Then in colors.xml, you add:

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

I suspect that what might be happening is that the attribute is expecting an explicit color. At the very least, I've done exactly what you outline, except that I always indirectly reference the color rather than putting it right into my theme.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文