【问题标题】:Android Dark Mode BehaviorAndroid 暗模式行为
【发布时间】:2020-02-26 20:50:58
【问题描述】:

我正在尝试在我的应用程序中实现暗模式,但遇到了 MODE_NIGHT_YES|MODE_NIGHT_NO 标志的奇怪行为。

我使用 AppCompatDelegate.setDefaultNightMode(...) 来设置全局暗模式。因此,当我使用 MODE_NIGHT_FOLLOW_SYSTEM 时,一切都很完美并且按预期工作,但是当我使用 MODE_NIGHT_YESMODE_NIGHT_NO 时,我的应用程序仍然会对系统暗模式切换设置做出反应并在它发生时重新创建我的活动。我希望如果我设置 MODE_NIGHT_YESNO 系统设置无论如何都不会影响我的应用程序,但它确实会。

这是预期的结果还是错误?此外,我不会自己处理 uiMode 配置更改,一切都是通过使用 AppCompatDelegate.setDefaultNightMode(...) 完成的。但看起来我应该这样做以防止不必要的活动娱乐。

【问题讨论】:

    标签: android themes android-darkmode


    【解决方案1】:

    这种行为是正确的。每次您执行以下任一操作时:

    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
    
    

    或者

    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    

    必须重新创建您的活动才能应用它。

    另一方面,如果您使用:AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) 您的活动将使用系统主题模式首选项进行初始化(如果 BuildCompat.isAtLeastQ())

    【讨论】:

    • 是的,对于 FOLLOW_SYSTEM 一切都很好,但是当我使用标志 MODE_NIGHT_NO 设置一些严格的主题(如 Light only)并且切换系统暗模式设置时,无论每次系统切换更改如何,我的应用都会重新创建(系统切换是指通知栏中的操作系统范围切换)。我假设如果我的应用程序只有 1 个主题,那么系统设置不应在每次更改时重新创建我的应用程序,但确实如此。
    • 对不起,我的评论有误。再看看解释
    • 是的,我明白了,这在我设置此值时是预期的,但不是在我坐下 MODE_NIGHT_NO(我的活动被重新创建,这没关系)之后,然后我打开暗模式/从设备通知菜单关闭我的活动也被重新创建(我的意思是在 MODE_NIGHT_NO 值已经饱和之后)。 MODE_NIGHT_FOLLOW_SYSTEM 标志会出现这种行为,因此应用程序可以在系统切换更改时重新创建自己以应用主题,但当您不想遵循系统时则不会。这正是我的问题,当我不关注系统时,我不希望在系统更改时重新创建我的活动。
    • 继续:当您设置值 MODE_NIGHT_NO 时第一次重新创建是可以预期的,但系统暗模式切换更改的所有后续重新创建不是(此切换不是 sdk 的一部分或代码,它是 android 10 系统 ui 按钮)
    猜你喜欢
    • 1970-01-01
    • 2022-06-28
    • 2019-11-08
    • 2020-12-24
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    相关资源
    最近更新 更多