最佳答案
我想为我的应用程序有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>
这个方法工作得很好,允许我轻松地创建和修改几个主题。
例如,从布局中的视图引用一个值是可行的:
<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
,但同样的情况发生了。
我怎么能这么做?为什么它在视野中有效,而在 Drawables 没有效?我在 文件的任何地方都找不到这个限制..。