Как изменить тему приложения Android во время выполнения, например Google Inbox App?
Приложение "Входящие" имеет навигационный ящик. При нажатии на любой элемент навигационного ящика загружается фрагмент (наиболее вероятно), и во время этой транзакции тема приложения изменяется. Изменение темы приложения требует вызова метода setTheme() перед setContentView(..) в методе onCreate() действия. Сверхтекучий пользовательский интерфейс указывает на использование фрагментов, так как, как это достигается без воссоздания родительской активности (иначе наверняка было бы отставание).
2 ответа
Вы можете изменить стиль темы, но только перед вызовом setContentView(@ResId int)
метод. Может быть, что-то подобное?
getTheme().applyStyle(isDashUser ? R.style.redStatusBar : R.style.blackStatusBar, true);
setContentView(R.layout.my_activity);
Если вы внимательно присмотритесь при смене страницы, между двумя цветами будет небольшая градация. Это, вероятно, говорит о том, что у них есть отдельная от них система для перекрашивания всех элементов пользовательского интерфейса.
В одном из моих приложений есть очень похожая функция изменения цвета, и у меня просто есть методы, настроенные для повторного применения соответствующих цветов к каждому элементу пользовательского интерфейса. Конечно, у Google, вероятно, есть какой-то супер хитрый способ сделать это, которым они никогда ни с кем не поделятся.