【问题标题】:How to add a theme attribute to android:startColor in gradient drawable in Android?如何在Android的渐变可绘制中向android:startColor添加主题属性?
【发布时间】:2012-02-06 17:50:55
【问题描述】:

根据android文档,android:startColor可以将属性作为值:

这也可能是对资源的引用(形式为 “@[package:]type:name”)或主题属性(形式为 "?[package:][type:]name") 包含此类型的值。

我正在尝试向我的渐变可绘制对象添加一个属性,但出现错误。这是drawable的代码:

这是style.xml中的代码:

<style name="test" parent="android:Theme">
    <item name="android:startColor">#0b2749</item> 
    <item name="startColor">#0b2749</item>
</style>

当我尝试运行活动时,我收到以下错误消息:

01-10 20:47:30.810: E/AndroidRuntime(7279): Caused by: java.lang.UnsupportedOperationException: Can't convert to color: type=0x2

我尝试将 ?startColor 更改为 ?attr/startColor ,但仍然出现相同的错误。我还将主题应用于 AndroidManifest.xml 文件中的活动。

如何向渐变可绘制对象添加主题属性?

【问题讨论】:

  • 与 android:color 在描边元素上的问题相同。实际上,每次我们尝试从可绘制对象中引用样式属性时,似乎都会发生此异常。这看起来像一个 Android 错误。
  • 我找到了一个可能对您有用的解决方法,请参阅我的回答

标签: android android-layout


【解决方案1】:

我在我的一个可绘制对象中遇到了同样的问题,我想要根据所选主题使用不同的颜色。我找到了一种解决方法,它不能完全解决问题,但对我有用。我没有在我的样式中定义颜色,而是将整个可绘制对象定义为参考。

attrs.xml:

<resources>
    <attr name="myDrawable" format="reference"/>
<resources>

在我的style.xml:

<style name="style1">
    <item name="myDrawable">@drawable/myDrawable1</item>
<style>
<style name="style2">
    <item name="myDrawable">@drawable/myDrawable2</item>
<style>

当然,你需要在你的drawable文件夹中定义两个drawable,myDrawable1myDrawable2,每个都有正确的硬编码颜色。

而且效果很好。

【讨论】:

  • 谢谢。我知道这个解决方案,以及我想通过属性解决的原因,以减少我的应用程序中的可绘制对象的数量,以使其易于管理,因为它们已经太多了。
  • 是的,我也有同样的担忧,这就是为什么我只称其为解决方法。我仍然有兴趣找到一个真正的解决方案,尽管我开始怀疑是否存在,它似乎越来越像 Android 错误或功能......
  • 此外,我们不能在可绘制文件夹中包含子文件夹这一事实对于大中型项目来说是一种痛苦(我的一个项目中有 5000 多个项目......)
  • 子文件夹问题可以通过使用正确的命名约定来解决,例如:folder_file_or_drawable_name.xml。
【解决方案2】:
<style name="customTheme" parent="android:Theme">  
    <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
</style>

在 values 文件夹中的 colors.xml 中添加上述代码,在 styles.xml 中添加以下代码

<color name="titlebackgroundcolor">#FFFFFF</color>
<color name="titletextcolor">#000000</color>

【讨论】:

  • 代码不清楚。请您格式化它以便我能够测试它。
  • 只需在样式和项目中添加 标记,我无法放置它,因为它使文本不可见
  • 将上述代码加入values 文件夹中的 colors.xml 和 styles.xml 中的以下代码 #FFFFFF #000000
  • 如何将它应用到渐变可绘制对象?
【解决方案3】:

看来您只是在颜色方面犯了一个小错误。 Android 采用#[alpha] [hex] 类型的颜色输入。您刚刚提供了十六进制部分。 Android 不支持这个,因此UnsupportedOperationException

试试这个:

&lt;item name="android:startColor"&gt;#FF0b2749&lt;/item&gt;

但我不能保证这会奏效,因为我从未将渐变与样式结合使用。

【讨论】:

  • 其实android支持不带alpha值的颜色。根据相同的文档:必须是颜色值,形式为“#rgb”、“#argb”、“#rrggbb”或“#aarrggbb”。
  • 嗯。你知道的越多。前段时间有这个问题,直到我添加了 alpha 但很高兴知道它可以在没有的情况下工作。
  • 这并不能解决问题,但是:无论有没有 alpha 值,都会发生同样的异常
猜你喜欢
  • 1970-01-01
  • 2019-07-18
  • 2015-01-10
  • 2020-06-10
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多