Темы Android - определение цветов в пользовательских темах
Я уверен, что есть простой ответ на это, но я просто не могу найти его, поэтому я бросаю его в stackoverflow...; -)
Я просто приведу его в пример. У меня есть приложение для Android, в котором пользователь может выбрать тему в настройках - темную или легкую тему. В зависимости от выбранной темы я должен настроить 20 цветов в моем приложении. Поэтому у меня есть надежда, что я могу определить цвета в теме, а затем использовать имена этих так определенных цветов в моем TextViews и т.д. Но пока я не могу понять, как это сделать и не может найти какое-либо решение здесь и там, Я действительно не хочу определять дополнительный темный и легкий стиль для каждого из этих 20 цветов, но пока что кажется единственным решением, которое я могу найти.
Большое спасибо за любую подсказку
мартин:
UPDATE:
В псевдо синтаксисе это то, что я ищу. Возможно ли это?
<style name="AppTheme.MyDark" parent="android:Theme">
-?-> titleColor = "#ffffff"
-?-> introColor = "#ffaaaa"
</style>
<style name="AppTheme.MyLight" parent="android:Theme.Light">
-?-> titleColor = "#000000"
-?-> introColor = "#004444"
</style>
<TextView
android:id="@+id/quoteTitle"
android:[email protected]
...
</TextView>
<TextView
android:id="@+id/quoteIntro"
android:[email protected]
...
</TextView>
Ответы
Ответ 1
Я нашел решение, которое, похоже, работает. Сначала вам нужно определить пользовательские поля цвета в attr.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="titleColor" format="reference|color" />
<attr name="introColor" format="reference|color" />
</resources>
Далее вы определяете свои темы
<style name="AppTheme.MyDark" parent="android:Theme">
<item name="titleColor">#FFFFFF</item>
<item name="introColor">#FFFFFF</item>
</style>
<style name="AppTheme.MyLight" parent="android:Theme">
<item name="titleColor">#000000</item>
<item name="introColor">#004444</item>
</style>
и, наконец, в вашем макете
<TextView
android:id="@+id/quoteTitle"
android:textColor="?titleColor"
...
</TextView>
<TextView
android:id="@+id/quoteIntro"
android:textColor="?introColor"
...
</TextView>
Я нашел решение главным образом здесь
В официальной андроидной документации об использовании атрибутов, похоже, нет никаких объяснений. Лучший ресурс, который я нашел, здесь