You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编程检测Android系统是否支持深色主题?

检测系统是否支持深色主题的正确方式

你遇到的问题很典型——原来的方法之所以在Android 5(API 21)这类低版本设备上返回true,是因为Configuration.UI_MODE_NIGHT_UNDEFINED是在API 23才引入的常量,而更低版本的系统里这个值为0,和configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK的默认结果(同样是0)对比时,自然会返回true,这就造成了误判。

要准确检测系统是否支持深色主题,需要结合系统版本和UI模式的有效性来判断,具体实现如下:

public boolean isSystemDarkThemeSupported(Context context) {
    // Android 10(API 29)及以上系统原生支持系统级深色主题
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        return true;
    }
    
    // 针对Android 9(API 28)及以下,判断定制系统是否实现深色主题支持
    final Configuration configuration = context.getResources().getConfiguration();
    final int nightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK;
    
    // API 23到API 28的设备,只有nightMode不是UNDEFINED时,说明系统支持深色主题切换
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return nightMode != Configuration.UI_MODE_NIGHT_UNDEFINED;
    }
    
    // API 23以下的原生系统无深色主题概念,定制ROM的非标准实现无法通过通用API检测,默认返回false
    return false;
}

补充说明:

  • 原生Android在API 29(Android 10)才正式推出系统级深色主题,因此这部分可以直接返回true。
  • 对于API 23到API 28的设备,UI_MODE_NIGHT_UNDEFINED是有效常量,通过判断nightMode是否为该值,就能识别出像MIUI 11这类基于Android 9但支持深色主题的定制系统。
  • API 23以下的设备,原生系统没有夜间模式的设计,即便部分定制ROM有类似功能,也无法通过标准Android API检测,若要兼容这类场景,可能需要额外检测特定系统属性或包名,但通用性较差。

内容的提问来源于stack exchange,提问作者Alexey Nikitin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:14:07