2016-09-08 3 views
0

В моем приложении мне нужно изменить все цвета времени выполнения. Приложение начинается с серого, а затем просит пользователя выбрать свой пол. Когда они выбирают мужчина, тогда приложение становится синим, и когда они выбирают женщина приложение становится розовым.Как изменить colors.xml программно, сохраняя все стили в моей теме?

Я определил, что AppTheme стили все виджеты, имея в виду цвета в res/values/colors.xml и используя res/drawable для фонов, которые, в свою очередь, также относятся к цветам. Все кажется довольно солидным и аккуратно связанным, поэтому я бы очень хотел его использовать!

Я думаю, что если я каким-то образом заменил res/values/colors.xml, тогда все получилось бы прекрасным, но я боюсь, что это невозможно, и я не знаю, как это сделать в первую очередь. Боюсь, мне пришлось бы скопировать и вставить мою тему в AppTheme.Blue и AppTheme.Pink, но это довольно ужасно, потому что это каскады в замену близко к каждому drawable/*.

Итак, как это сделать? Там должен быть какой-то трюк, где я могу иметь отдельный colors.xml и переключаться между ними ...

+0

http://stackoverflow.com/questions/4663752/switching-application-wide-theme-programmatically – Stallion

+0

@Stephan Henningsen плз проверить эту LIB: https://github.com/negusoft/GreenMatter, https: //github.com/negusoft/holoaccent –

+0

@Stallion Я не вижу, как это отвечает на мой вопрос. –

ответ

0

Вы не можете изменить colors.xml, вместо этого вы должны создавать темы с атрибутами темы, которые указывают на цвета. Таким образом, в одной теме атрибут primary_dark будет указывать на черный, а в другом - на серый. Затем ваши стили указывают на атрибуты темы, а не на цвета напрямую. Таким образом, вы можете изменить свою тему во время выполнения, которая затем изменит, какие цвета отображаются на атрибуты/стили. Вот хороший гид о том, как это сделать http://www.hidroh.com/2015/02/25/support-multiple-themes-android-app-part-2/

 Смежные вопросы

  • Нет связанных вопросов^_^