首页 > 解决方案 > 在 Android Studio 中以编程方式从应用程序触发系统的暗模式

问题描述

我只想知道是否有任何语法可以触发手机的内部暗模式,我知道我应该用来SharePreferences在我的手机中保存暗模式状态,但我想要的是,有什么功能可以触发暗模式进入我的整个移动视图,而不仅仅是我创建的应用程序。最好的实施方式是darkmode什么?是sharedPref吗?

我不想在设置上手动单击它,而是想通过我的应用程序按钮darkmode触发darkmode,这可能吗?

在此处输入图像描述

我刚试过这个,但结果,它只在我的应用程序中触发了暗模式,而不是在整个手机上。我很感激任何帮助。

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);

标签: androidandroid-studiodarkmodesystem-setting

解决方案


走向黑暗面:黑暗主题回顾

雅罗斯拉夫·别列赞斯基官方文件

控制水平。向后兼容性

Dark Theme 有 3 个级别的控制:

  1. 系统设定
  2. 应用程序设置
  3. 活动设置

在此处输入图像描述

一、系统设置:

这是一个全局设置,由用户显式或隐式控制(通过切换省电模式)。

改变它的方法有限:

  • Dark Theme Toggle (Settings->Display->Dark Theme) — 在 Android Q (API 29) 中引入;
  • 夜间模式开发者选项(设置->系统->开发者选项->夜间模式)- 仅适用于 Android P (API 28)。
  • 省电模式。向后兼容至 Android Lollipop (API 21)。一些 EOM 可能不支持这一点。

此设置应用于系统级别,包括所有系统 UI 和应用程序。更改设置后,您的应用程序将获得Application.onConfigurationChange回调,并立即重新创建所有活动。但是,取决于您的应用程序是否遵循它或用本地应用程序覆盖(应用程序或活动范围的设置)。

2.应用设置:

作为一个好公民,您可以让用户在您的应用程序内的主题之间进行选择(覆盖系统设置)。

它可以通过您的自定义小部件使用AppCompatDelegate.setDefaultNightMode API 进行控制(通常,它是设置屏幕中的 ListPreference)。

推荐的选项是:

  • 黑暗的
  • 由省电模式设置。它向后兼容 API 21(API 21–27 的推荐默认选项)
  • 系统默认(API 28 及更高版本推荐的默认选项)

此外,您可以将 Light 设置为默认值,并将 API 的最后 2 个选项隐藏在 21 以下,因为它们都不支持。

每个选项都直接映射到 AppCompat.DayNight 模式之一:

  • 光 — MODE_NIGHT_NO
  • 黑暗 — MODE_NIGHT_YES
  • 由省电模式设置 — MODE_NIGHT_AUTO_BATTERY
  • 系统默认值 - MODE_NIGHT_FOLLOW_SYSTEM

更改设置后,将重新创建所有已启动的活动(或获取Activity.onConfigurationChange回调,如果您选择在清单中手动处理配置更改)。

3.活动设置:

它与应用程序设置非常相似,但仅适用于使用getDelegate().setLocalNightMode 的特定活动。请注意,它的任何调用都会触发活动重新创建(如果主题发生变化)。正如 Chris Banes在这里所建议的那样,您应该更喜欢AppCompatDelegate.setDefaultNightMode,因为它可以最大限度地减少不必要的娱乐。


推荐阅读