Android 夜间模式加载错误颜色的错误

Android bug loading wrong colors in night mode

免责声明:我已经找到了解决此问题的方法,但想 post 为其他人解答问题,因为我花了很长时间才弄清楚为什么会这样。

我 运行 遇到了一个 st运行ge 问题,当我在夜间模式下打开我的应用程序时,一些 UI 以正确的夜间模式颜色加载,一些 UI UI 以正常颜色加载。

原来有一个奇怪的错误,只有在 第一次 创建 WebView 时,它会重置 UI 模式。所以对我来说,发生的事情是:

-应用程序已初始化并设置夜间模式
- 一些 UI 以正确的颜色
在初始 activity 中加载 -异步调用获取内容
-WebView在二级片段中创建,重置UI模式
-异步调用returns,正常模式下加载UI个元素

解决方案(我发现 here)是在应用程序启动时初始化一个在启用夜间模式之前未在任何地方使用的虚拟 WebView,以便下次使用 WebView 时不会重置 UI 模式。所以像这样:

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 中修复了这个问题(虽然还没有真正尝试过) "Fixed WebView resets DayNight Resources (b/37124582)"