Je souhaite avoir 2 thèmes sélectionnables pour mon application. Pour ce faire, j'ai défini quelques attributs, comme ceci:
<attr format="color" name="item_background" />
Ensuite, j'ai créé les deux thèmes, comme ceci:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
Cette méthode fonctionne très bien, me permettant de créer et de modifier facilement plusieurs thèmes. Le problème est qu'il semble qu'il ne puisse être utilisé que dans Views, et non dans Drawables .
Par exemple, le référencement d'une valeur à partir d'une vue à l'intérieur d'une mise en page fonctionne:
<TextView android:background="?item_background" />
Mais faire la même chose dans un Drawable ne permet pas:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
J'obtiens cette erreur lors de l'exécution de l'application:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
Si au lieu d' ?item_background
utiliser une couleur codée en dur, cela fonctionne, mais cela ne me permet pas d'utiliser mes thèmes. J'ai aussi essayé ?attr:item_background
, mais la même chose se produit.
Comment pourrais-je faire ça? Et pourquoi cela fonctionne-t-il dans Views mais pas dans Drawables? Je ne trouve cette limitation nulle part dans la documentation ...