Установить программу программно в окно предварительного просмотра системы Android - PullRequest
0 голосов
/ 17 марта 2019

У меня есть приложение, в котором пользователь может выбирать между темой по умолчанию и темной темой. Манифест применяется AppTheme к <application>, в то время как каждое действие проверяет соответствующий флаг и использует setTheme(AppTheme.Dark) при необходимости.

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

Основываясь на других ответах SO, я понял, что единственная настройка, которую мы можем сделать, - это установить windowBackground отрисовку для используемого окна (и statusBarColor при необходимости).

Несмотря на то, что у меня есть две разные windowBackground для каждой темы, я не могу изменить тему для окна предварительного просмотра, так как класс Application, кажется, загружается после него, и установка темы там не имеет значения.

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

Стили:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- primary and accent color attributes -->

    <item name="android:windowBackground">@color/activityBackgroundLight</item>
</style>

<style name="AppTheme.Dark" parent="AppTheme">
    <!-- primary and accent color attributes -->

    <item name="android:windowBackground">@color/activityBackgroundDark</item>
</style>

Примечание: хотя я здесь использую цвета, я уже пробовал рисовать с градиентом, и это ничего не меняет.


ОБНОВЛЕНИЕ: Я не смог получить какой-либо другой метод, поэтому я выбрал темную тему по умолчанию в SplashActivity. Это означает, что окно предварительного просмотра всегда темное, в то время как проверка в onCreate в SplashActivity инвертирована (по сравнению с другими действиями) и при необходимости применяет светлую тему.

Все еще ищу решение, которое на самом деле позволяет мне переключаться во время выполнения.

...