Отказ от ответственности: я уже нашел решение этой проблемы, но хотел опубликовать вопрос и ответ для других людей, так как мне потребовалось много времени, чтобы понять, почему это происходит.
Я столкнулся со странной проблемой, когда при открытии приложения в ночном режиме часть пользовательского интерфейса загружалась в правильных цветах ночного режима, а часть пользовательского интерфейса загружалась в обычных цветах.
Оказывается, есть странная ошибка, когда только при первом создании WebView происходит сброс режима пользовательского интерфейса. Для меня то, что происходило, было:
-Application инициализируется и ночной режим включен
-Some пользовательского интерфейса загружается в начальном действии с правильными цветами
-Asynchronous сделан вызов для извлечения контента
-WebView создается во вторичном фрагменте, сбрасывая режим пользовательского интерфейса
-Asynchronous возврат вызова, загрузка элементов пользовательского интерфейса в обычном режиме
Решение (которое я нашел здесь) заключается в инициализации фиктивного 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)
}
}
}