Темы для 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 по поводу использования атрибутов нет объяснений. Лучший ресурс, который я нашел здесь

Другие вопросы по тегам