Android:在 Android 10 及更高版本中将正确更改为 UI 模式黑暗

问题描述

我想将深色模式应用于我的 Android 10 及更高版本的应用。
因此我在启动时编写了以下代码

int modeNight;
int colorMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
if (colorMode == Configuration.UI_MODE_NIGHT_YES) {
    modeNight = AppCompatDelegate.MODE_NIGHT_YES;
} else {
    modeNight = AppCompatDelegate.MODE_NIGHT_NO;
}

AppCompatDelegate.setDefaultNightMode(modeNight);

这在一般情况下有效。如果我启动应用程序,就会设置正确的模式。
但是,如果应用程序仍在后台并且我再次启动它,这将不起作用。
如果我在应用程序没有完全关闭的情况下启动它,getResources().getConfiguration() 不会更新并且它总是返回旧值,直到我终止应用程序并重新启动它。
如何强制应用重新加载资源配置?或者我还能如何解决这个问题?

更新
我现在用 AppCompatDelegate.setDefaultNightMode(modeNight); 替换了 setTheme(R.style.Theme_ImmoFinder24);。 这适用于通用主题,但我仍然有问题:
我有一些元素(回收站视图),用户可以在其中设置背景颜色。一种颜色用于正常模式,一种用于暗模式。
主题改变了,但颜色听AppCompatDelegate.setDefaultNightMode(modeNight);中设置的值。
如果我同时保留 setDefaultNightMode()setTheme(R.style.Theme_ImmoFinder24);,它不会改变问题的开始(没有 setTheme())。

解决方法

您必须将应用的主题更改为 DayNight

parent="Theme.AppCompat.DayNight"

您也可以使用 MaterialComponents 的深色主题:

parent="Theme.MaterialComponents.DayNight"

并使用系统设置(设置 -> 显示 -> 主题)启用深色主题。

请查看此链接了解更多信息:https://developer.android.com/guide/topics/ui/look-and-feel/darktheme