Как изменить тему приложения Android во время выполнения, например Google Inbox App?

Приложение "Входящие" имеет навигационный ящик. При нажатии на любой элемент навигационного ящика загружается фрагмент (наиболее вероятно), и во время этой транзакции тема приложения изменяется. Изменение темы приложения требует вызова метода setTheme() перед setContentView(..) в методе onCreate() действия. Сверхтекучий пользовательский интерфейс указывает на использование фрагментов, так как, как это достигается без воссоздания родительской активности (иначе наверняка было бы отставание).

Фрагмент повтора hase oragne как тема

Фрагмент входящих сообщений имеет синий цвет, как они

2 ответа

Вы можете изменить стиль темы, но только перед вызовом setContentView(@ResId int) метод. Может быть, что-то подобное?

getTheme().applyStyle(isDashUser ? R.style.redStatusBar : R.style.blackStatusBar, true);
setContentView(R.layout.my_activity);

Если вы внимательно присмотритесь при смене страницы, между двумя цветами будет небольшая градация. Это, вероятно, говорит о том, что у них есть отдельная от них система для перекрашивания всех элементов пользовательского интерфейса.

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

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