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

React Native如何判断设备处于深色或浅色模式?

判断设备深色/浅色模式并适配应用配色的解决方案

下面按主流平台分别给出检测方法及适配逻辑:

Web 端

CSS 直接适配

利用 prefers-color-scheme 媒体特性,无需JS即可自动适配:

/* 浅色模式默认样式 */
body {
  background-color: #ffffff;
  color: #333333;
}

/* 深色模式样式覆盖 */
@media (prefers-color-scheme: dark) {
  body {
    background-color: #1a1a1a;
    color: #f0f0f0;
  }
}

JS 检测与监听

如果需要动态执行额外逻辑,可通过JS检测当前模式并监听变化:

// 初始检测当前模式
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
console.log(isDarkMode ? '当前为深色模式' : '当前为浅色模式');

// 监听模式切换
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (event) => {
  const newMode = event.matches ? 'dark' : 'light';
  // 这里插入配色切换的自定义逻辑
});

iOS 端(Swift)

通过 UITraitCollection 获取当前模式,并监听模式变化:

// 初始判断
let currentStyle = UITraitCollection.current.userInterfaceStyle
switch currentStyle {
case .dark:
    // 应用深色配色逻辑
    print("当前为深色模式")
case .light:
    // 应用浅色配色逻辑
    print("当前为浅色模式")
case .unspecified:
    print("未指定模式,默认按浅色处理")
@unknown default:
    break
}

// 在 UIViewController 中监听模式切换
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    guard traitCollection.userInterfaceStyle != previousTraitCollection?.userInterfaceStyle else { return }
    // 执行配色更新逻辑
}

Android 端(Kotlin)

通过 Configuration 检测模式,需配置监听配置变化:

// 初始判断
val currentMode = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
when (currentMode) {
    Configuration.UI_MODE_NIGHT_YES -> {
        // 应用深色配色
        println("当前为深色模式")
    }
    Configuration.UI_MODE_NIGHT_NO -> {
        // 应用浅色配色
        println("当前为浅色模式")
    }
    Configuration.UI_MODE_NIGHT_UNDEFINED -> {
        println("未定义模式,默认按浅色处理")
    }
}

// 监听模式变化(需在 AndroidManifest 的 activity 中添加 android:configChanges="uiMode")
override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    val newMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK
    // 更新配色逻辑
}

Flutter 端

利用 MediaQuery 获取当前亮度,或通过生命周期方法监听变化:

// 初始检测
final brightness = MediaQuery.of(context).platformBrightness;
if (brightness == Brightness.dark) {
    print("当前为深色模式");
} else {
    print("当前为浅色模式");
}

// 监听模式切换
@override
void didChangePlatformBrightness() {
    super.didChangePlatformBrightness();
    final newBrightness = WidgetsBinding.instance.window.platformBrightness;
    // 执行配色更新逻辑
}

内容的提问来源于stack exchange,提问作者John Ocean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:35:19