uniapp如何获取light和dark主题模式
在uniapp中如何检测当前系统是处于light还是dark主题模式?我想根据不同的主题模式动态切换应用样式,但找不到相关的API或方法。求教各位大佬有没有解决方案?
2 回复
在uniapp中,可以通过以下方式获取主题模式:
- 使用uni.getSystemInfoSync()获取系统信息
const systemInfo = uni.getSystemInfoSync()
const theme = systemInfo.theme // 'light' 或 'dark'
- 监听主题变化
uni.onThemeChange((res) => {
console.log(res.theme) // 主题变化时的回调
})
注意:部分平台可能不支持,建议做好兼容处理。
在 UniApp 中,可以通过以下方法获取当前系统的浅色(light)或深色(dark)主题模式:
方法一:使用 uni.getSystemSetting()(推荐)
UniApp 提供了 uni.getSystemSetting() API 来获取系统设置,包括主题模式。
// 获取系统主题模式
uni.getSystemSetting({
success: (res) => {
const theme = res.theme;
if (theme === 'dark') {
console.log('当前为深色模式');
// 执行深色主题逻辑
} else {
console.log('当前为浅色模式');
// 执行浅色主题逻辑
}
},
fail: (err) => {
console.error('获取主题失败:', err);
}
});
方法二:监听主题变化
如果需要实时响应主题切换,可以监听系统主题变化事件:
// 监听主题变化
uni.onThemeChange((res) => {
const theme = res.theme;
if (theme === 'dark') {
console.log('切换到深色模式');
} else {
console.log('切换到浅色模式');
}
});
注意事项:
-
平台支持:
- 此功能在 H5、微信小程序、App 端支持较好,但具体支持情况需查看对应平台文档。
- 部分低版本平台可能不支持,建议先判断 API 是否存在。
-
兼容性处理:
if (uni.getSystemSetting) { // 执行获取主题逻辑 } else { console.log('当前环境不支持获取主题'); } -
CSS 适配: 可以结合 CSS 媒体查询实现样式自动切换:
/* 深色模式 */ [@media](/user/media) (prefers-color-scheme: dark) { body { background: #000; color: #fff; } } /* 浅色模式 */ [@media](/user/media) (prefers-color-scheme: light) { body { background: #fff; color: #000; } }
总结:
- 使用
uni.getSystemSetting()获取当前主题。 - 通过
uni.onThemeChange()监听主题变化。 - 结合 CSS 媒体查询实现无缝主题切换。
根据你的需求选择合适的方法即可。

