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

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

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


person odiggity    schedule 15.01.2019    source источник


Ответы (1)


Оказывается, существует странная ошибка, из-за которой только при первом создании 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)
        }
  }
}

Изменить Похоже, они могли исправить это в версии Appcompat 1.1.0-alpha03 (хотя на самом деле не пробовали) «Исправлено WebView сбрасывает ресурсы DayNight (b/37124582)»

person odiggity    schedule 15.01.2019
comment
Это исправило ситуацию, но недавно мы заметили, что это вызывает сбои на устройствах Samsung с Android P. Вы можете увидеть отчет о сбое здесь stackoverflow.com/questions/44035654/ Были ли у вас подобные сбои? - person display name; 15.08.2019
comment
Я использую Appcompat 1.1.0, и проблема с этим не устранена. Может быть, они отказались от исправления в выпущенной версии? - person chrisbtoo; 16.10.2020
comment
Привет из 2021 года: даже с AppCompat 1.3.0 это все еще необходимо. - person Sebastian3000; 29.05.2021