Я сделал приложение, используя только одну тему, но теперь я хочу, чтобы пользователь мог изменить ее во время выполнения. Поскольку некоторые элементы макета должны быть окрашены с использованием определенного цвета, все мои layout.xml-ы имеют свойства, такие как android:background="@color/colorBackground"
или что-то в этом роде.
В настоящее время я сделал цветовую палитру внутри colors.xml
. Это выглядит примерно так:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#607D8B</color>
<color name="colorPrimaryDark">#455A64</color>
<color name="colorAccent">#FF9800</color>
<color name="colorBackground">#FAFAFA</color>
<color name="colorTextSubtitle">#F0F0F0</color>
<color name="colorTextSubtitleBackground">#AA000000</color>
</resources>
Однако таким образом у меня может быть только одна тема. Я думал о том, чтобы сделать что-то вроде того, чтобы цвета были частью стиля темы (все темы будут иметь одинаковые цветовые элементы, но с разными значениями).
Как я могу сделать так, чтобы мои файлы макета определяли текущую тему приложения и получали оттуда название цвета? Итак, что-то вроде android:background="[currentTheme.colorBackground]"
, чтобы я мог иметь несколько стилей, а затем переключаться между ними.
Я думал о том, чтобы поместить темы в общие настройки или что-то подобное, а затем программно изменить цвета при переопределении метода onCreate()
, но это кажется слишком сложным, и я подумал, что должен быть более простой способ. Однако я не могу найти ничего подобного в Интернете.