android - 如何检查 Android 操作系统中是否存在深色主题?
问题描述
官方在 Android 10 中提供深色主题,但实际上,例如在 Android 9 MIUI 11 中提供深色主题。有没有办法以编程方式检查 OS 深色主题是否可用?我试图通过该Configuration#uiMode
字段进行检查:
public boolean isSystemDarkAllowed() {
final Configuration configuration = context.getResources().getConfiguration();
final int nightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK;
return nightMode != Configuration.UI_MODE_NIGHT_UNDEFINED;
}
但它不起作用,对于 Android 5 它返回true
解决方案
是的,您可以通过以下代码进行检查
switch (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) {
case Configuration.UI_MODE_NIGHT_YES:
Log.v("BaseActivity","THEME_DARK");
break;
case Configuration.UI_MODE_NIGHT_NO:
Log.v("BaseActivity","THEME_LIGHT");
break;
编辑
我已经使用下面的代码添加了他们如下。
switch (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) {
case Configuration.UI_MODE_NIGHT_YES:
Log.v("BaseActivity","THEME_DARK");
setTheme(R.style.AppTheme_Dark);
Consts.currentTheme=Consts.THEME_DARK;
break;
case Configuration.UI_MODE_NIGHT_NO:
Log.v("BaseActivity","THEME_LIGHT");
setTheme(R.style.AppTheme);
Consts.currentTheme=Consts.THEME_LIGHT;
break;
推荐阅读
- sql-server - ROLLBACK 使 INSERTED 表中的数据在 AFTER INSERT TRIGGER 中删除
- firebase - 如何在flutter中从firestore打印值
- php - 循环外的php计数变量被重置
- c# - 在中心条目 Xamarin 中时将插入符号移动到占位符的开头
- mysql - Laravel 运行时错误:无效请求(远程主机强制关闭现有连接)
- xamarin.android - 尝试将 admob 添加到项目时出错
- c++ - 将声明的枚举转发为类成员变量
- javascript - 为 React Native Web 项目使用适当的转译器
- python - KivyLauncher:手机屏幕上的错误图像
- sql - 如何从单个列上带有附加 where 子句的表中进行选择