Ошибка Android при загрузке неправильных цветов в ночном режиме
Отказ от ответственности: я уже нашел решение этой проблемы, но хотел опубликовать вопрос и ответ для других людей, так как мне потребовалось много времени, чтобы понять, почему это происходит.
Я столкнулся со странной проблемой, когда при открытии приложения в ночном режиме часть пользовательского интерфейса загружалась в правильных цветах ночного режима, а часть пользовательского интерфейса загружалась в обычных цветах.
1 ответ
Оказывается, есть странная ошибка, когда только при первом создании WebView происходит сброс режима пользовательского интерфейса. Для меня то, что происходило, было:
-Приложение инициализировано и включен ночной режим
-Некоторый пользовательский интерфейс загружается в начальной деятельности с правильными цветами
-Асинхронный вызов сделан для извлечения контента
-WebView создается во вторичном фрагменте, сбрасывая режим пользовательского интерфейса
-Асинхронный возврат вызовов, загрузка элементов пользовательского интерфейса в обычном режиме
Решение (которое я нашел здесь) заключается в инициализации фиктивного WebView при запуске приложения, которое нигде не используется перед включением ночного режима, чтобы в следующий раз при использовании WebView оно не сбрасывало режим пользовательского интерфейса. Так что-то вроде этого:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
val nightModeEnabled = //get value from shared prefs or wherever you are storing this flag
if (nightModeEnabled) {
Timber.d("Manually instantiating WebView to avoid night mode issue.");
try {
WebView(applicationContext)
} catch (e: Exception) {
Timber.e("Got exception while trying to instantiate WebView to avoid night mode issue. Ignoring problem.", e)
}
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
}
}
}