Android夜间模式跟随系统无法正常工作

Android夜间模式跟随系统无法正常工作,android,android-layout,android-dark-theme,android-darkmode,Android,Android Layout,Android Dark Theme,Android Darkmode,我在应用程序中使用DayNight材质主题实现了黑暗主题。我在网上看了几篇文章和几次会议谈话。一切都很顺利,直到一些小事情开始发生。让我解释一下: 该应用程序有几个活动。为了不显式地为每个活动设置主题,我按照建议将初始主题设置放在应用程序的onCreate()方法中。不过,这有一个缺点,我将在下面解释 1.)AppCompat在活动级别实现夜间模式,这意味着它不会更新应用程序上下文(我正在使用它设置整个应用程序的主题)(来源:) 2.)建议使用这段代码检查应用程序是否在哪个模式下运行。但在我的例

我在应用程序中使用DayNight材质主题实现了黑暗主题。我在网上看了几篇文章和几次会议谈话。一切都很顺利,直到一些小事情开始发生。让我解释一下:

该应用程序有几个活动。为了不显式地为每个活动设置主题,我按照建议将初始主题设置放在应用程序的onCreate()方法中。不过,这有一个缺点,我将在下面解释

1.)AppCompat在活动级别实现夜间模式,这意味着它不会更新应用程序上下文(我正在使用它设置整个应用程序的主题)(来源:)

2.)建议使用这段代码检查应用程序是否在哪个模式下运行。但在我的例子中,它返回完全相反的模式:

val currentNightMode = configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
when (currentNightMode) {
    Configuration.UI_MODE_NIGHT_NO -> {} // Night mode is not active, we're using the light theme
    Configuration.UI_MODE_NIGHT_YES -> {} // Night mode is active, we're using dark theme
}
3.)将我的应用程序设置为跟随系统,然后手动切换到灯光模式(在应用程序中),然后返回跟随系统时,即使我的手机处于系统范围内的黑暗主题中,我的应用程序仍保持灯光。但是,当切换我的应用程序的主题时,它会发生变化

我做错了什么?可能的解决方案是将主题设置在活动级别上吗

            when (resources.configuration.uiMode.and(Configuration.UI_MODE_NIGHT_MASK)) {
                Configuration.UI_MODE_NIGHT_NO -> themeLight.isChecked = true
                Configuration.UI_MODE_NIGHT_YES -> themeDark.isChecked = true
                Configuration.UI_MODE_NIGHT_UNDEFINED -> themeLight.isChecked = true
            }
使用上面的代码获取当前主题。 为了立即更改主题,您需要添加

 AppCompatDelegate.setDefaultNightMode(themeMode)

在resources文件夹中,您可以在value\u night文件夹中添加bools.xml 用下面的代码


真的

上有som线程,因此人们会在其中声明相同的问题。选择Follow System(跟随系统)时,即使我的手机处于黑暗模式,我的主题也不会从浅色变为深色。为了使更改立即生效,您需要重新启动活动,请查看上面的代码。我添加了一些更详细的信息,例如,它与自动电池一起工作。真奇怪。我将我的应用程序主题更改为跟随系统,但它无法识别系统主题,但尝试使用电池节电器进行此操作,效果良好。我认为这是API的一些问题。事实上,你能在改变主题的地方添加代码吗