Темы 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>

Я нашел решение главным образом здесь

В официальной андроидной документации об использовании атрибутов, похоже, нет никаких объяснений. Лучший ресурс, который я нашел, здесь