Android 9获取系统深色主题状态异常问题求助
Android 9 获取系统深色主题状态的解决方案
Android 10(API 29)才引入原生系统级明暗主题切换框架,Configuration.uiMode也是从这个版本开始能正确反映系统主题状态。而Android 9及以下没有原生系统深色主题,所谓的系统深色模式是各厂商通过自定义系统设置实现的,因此无法通过resources.configuration.uiMode获取系统主题状态,只能通过读取系统设置项来判断。
实现步骤
- 添加权限:在
AndroidManifest.xml中添加读取系统设置的权限:
<uses-permission android:name="android.permission.READ_SETTINGS" />
注意:该权限属于特殊权限,Android 6及以上需要动态申请,或在系统设置中手动授予应用"修改系统设置"权限。
- 读取系统设置判断主题:不同厂商的系统深色模式对应的设置键可能不同,以下是覆盖多数主流厂商的通用检测逻辑:
private fun isSystemDarkTheme(): Boolean { val contentResolver = applicationContext.contentResolver // 常见厂商的深色模式设置键 val possibleKeys = listOf( "ui_night_mode", // 部分原生定制系统 "dark_mode", // 小米/Redmi "night_mode", // 三星 "twilight_mode" // 部分厂商 ) for (key in possibleKeys) { try { val value = Settings.Secure.getInt(contentResolver, key) // 通常1代表深色模式开启,0代表关闭,部分厂商用2代表自动模式 return value == 1 || value == 2 } catch (e: Settings.SettingNotFoundException) { // 当前键不存在,继续尝试下一个 continue } } // 未找到匹配设置项,默认返回浅色状态 return false }
注意事项
- 不同厂商的设置键和取值可能存在差异,需要针对目标机型做适配测试。
- 由于依赖厂商自定义设置,该方法无法保证100%覆盖所有Android 9设备。
内容的提问来源于stack exchange,提问作者ProcgerXacker
相关产品推荐
相关产品推荐

