问题描述
我想将深色模式应用于我的 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