android - 在 Android Studio 中以编程方式从应用程序触发系统的暗模式
问题描述
我只想知道是否有任何语法可以触发手机的内部暗模式,我知道我应该用来SharePreferences
在我的手机中保存暗模式状态,但我想要的是,有什么功能可以触发暗模式进入我的整个移动视图,而不仅仅是我创建的应用程序。最好的实施方式是darkmode
什么?是sharedPref
吗?
我不想在设置上手动单击它,而是想通过我的应用程序按钮darkmode
触发darkmode
,这可能吗?
我刚试过这个,但结果,它只在我的应用程序中触发了暗模式,而不是在整个手机上。我很感激任何帮助。
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
解决方案
走向黑暗面:黑暗主题回顾
雅罗斯拉夫·别列赞斯基的官方文件
控制水平。向后兼容性
Dark Theme 有 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,因为它可以最大限度地减少不必要的娱乐。
推荐阅读
- azcopy - 验证 azcopy 或 az storage cli 以上传到 Azurite docker 模拟器
- python - 如何在 Windows 上为 python 2.7 32bit 安装 PIL?
- python - 在 Pandas Python 中对数据帧进行排序和过滤
- node.js - webpack-dev-server 的 npm install 谁需要'-g'?
- express - TypeError:bodyParser.json 不是 nuxt.js 中的函数
- node.js - 等到上一个查询完成后再运行下一个查询
- barcode - 将条码创建为“Alt+Tab”并切换 windows 应用程序,然后 Enter 键
- apache-spark - 转换用“|”分隔的表头和列数据 到 pyspark 中具有特定标题名称和数据行的单独列
- python - 如何自动抓取然后发出警报?
- c# - C# 应用程序故障排除