アプリケーションに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>
この方法はすばらしいので、いくつかのテーマを簡単に作成および変更できます。問題は、ビューでのみ使用でき、Drawableでは使用できないように見えることです。
たとえば、レイアウト内のビューからの値の参照は機能します。
<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
が、同じことが起こります。
どうすればこれができますか?そしてなぜそれはビューでは機能するがドローアブルでは機能しないのですか?この制限はドキュメントのどこにも見つかりません...