Chcę mieć 2 motywy do wyboru dla mojej aplikacji. W tym celu zdefiniowałem kilka atrybutów, na przykład:
<attr format="color" name="item_background" />
Następnie stworzyłem oba motywy, takie jak ten:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
Ta metoda działa świetnie, pozwalając mi łatwo tworzyć i modyfikować kilka motywów. Problem polega na tym, że wydaje się, że można go używać tylko w widokach, a nie w Drawables .
Na przykład odwołanie do wartości z widoku wewnątrz układu działa:
<TextView android:background="?item_background" />
Ale zrobienie tego samego w Drawable nie:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
Otrzymuję ten błąd podczas uruchamiania aplikacji:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
Jeśli zamiast tego ?item_background
używam zakodowanego na stałe koloru, działa, ale to nie pozwala mi na używanie moich motywów. Też próbowałem ?attr:item_background
, ale to samo się dzieje.
Jak mogłem to zrobić? I dlaczego działa w widokach, ale nie w Drawables? Nie mogę znaleźć tego ograniczenia w dokumentacji ...