アプリケーションに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
ましたが、同じことが起こります。
どうすればこれを行うことができますか?また、ビューでは機能するのにドローアブルでは機能しないのはなぜですか?この制限はドキュメントのどこにも見つかりません...