Ошибка Android при загрузке неправильных цветов в ночном режиме

1

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

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

Теги:
webview

1 ответ

4
Лучший ответ

Оказывается, есть странная ошибка, когда только при первом создании 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)
        }
  }
}
  • 1
    Это исправило ситуацию, но недавно мы заметили, что это вызывает сбои на устройствах Samsung с Android P. Вы можете увидеть об этом сообщении о сбое здесь stackoverflow.com/questions/44035654/… У вас были подобные сбои?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню