Темы для Android - определение цветов в пользовательских темах
Я уверен, что есть простой ответ на этот вопрос, но я просто не могу найти его, поэтому я бросаю его в stackru...;-)
Я просто приведу это в пример. У меня есть приложение для Android, где пользователь может выбрать тему в настройках - темную или светлую тему. В зависимости от выбранной темы, я должен настроить 20 цветов в своем приложении. Поэтому у меня есть надежда, что я смогу определить цвета в теме, а затем использовать имена этих так определенных цветов в моих TextViews и т. Д. Но пока я не могу понять, как это сделать, и не могу найти решение здесь и там., Я действительно не хочу определять дополнительный темный и светлый стиль для каждого из этих 20 цветов, но пока это единственное решение, которое я могу найти.
Большое спасибо за любую подсказку
Мартин:
ОБНОВИТЬ:
В псевдосинтаксисе это то, что я ищу. Является ли это возможным?
<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:textColor=@titleColor
...
</TextView>
<TextView
android:id="@+id/quoteIntro"
android:textColor=@introColor
...
</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>
Я нашел решение в основном здесь
Кажется, в официальной документации Android по поводу использования атрибутов нет объяснений. Лучший ресурс, который я нашел здесь