我想为我的应用程序提供 2 个可选主题。为此,我定义了一些属性,如下所示:
<attr format="color" name="item_background" />
然后,我创建了两个主题,如下所示:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
这种方法效果很好,让我可以轻松创建和修改多个主题。问题是它似乎只能在 Views 中使用,而不能在 Drawables 中使用。
例如,从布局内的视图中引用一个值是可行的:
<TextView android:background="?item_background" />
但是在 Drawable 中做同样的事情不会:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
运行应用程序时出现此错误:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
如果不是?item_background
我使用硬编码的颜色,它可以工作,但这不允许我使用我的主题。我也试过?attr:item_background
了,但同样的事情发生了。
我怎么能这样做?为什么它在 Views 中有效,但在 Drawables 中无效?我在文档中的任何地方都找不到这个限制......