Как получить цвета из текущей темы приложения из layout.xml?

Я сделал приложение, используя только одну тему, но теперь я хочу, чтобы пользователь мог изменить ее во время выполнения. Поскольку некоторые элементы макета должны быть окрашены с использованием определенного цвета, все мои 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(), но это кажется слишком сложным, и я подумал, что должен быть более простой способ. Однако я не могу найти ничего подобного в Интернете.


person Jadarma    schedule 05.09.2016    source источник
comment
Вы ничего не можете найти в Интернете? Я знаю, что видел руководства по динамическому изменению темы во время выполнения.   -  person OneCricketeer    schedule 05.09.2016


Ответы (1)


В то время как amitairos указывает, как вы можете стилизовать свои макеты, чтобы использовать стандартные цветовые палитры, вы спросили, как вы можете программно переключать тему, когда у вас есть несколько цветовых палитр в разных темах.

Для программной установки темы activity в OnCreate: activity.setTheme(R.style.FirstTheme);

Но не верьте мне на слово. См. еще один ответ SO: https://stackoverflow.com/a/18301723/1738090

Связанное дальнейшее чтение: https://chris.banes.me/2014/11/12/theme-vs-style/ https://developer.android.com/guide/topics/ui/themes.html

person w3bshark    schedule 05.09.2016