深色模式常见问题 - MiEcosystem/miot-plugin-sdk GitHub Wiki

1、为什么插件不显示深色模式

1、请确保本地SDK版本在10053以上

2、请在米家APP中,“我的”->“实验室功能”中打开“插件深色模式”的开关。(不支持深色模式的手机不会显示这个开关)

2、如何适配

目前我们插件的SDK拥有自动反色的功能,开发者可以先看看SDK的自动反色是否可以满足自己的设计需求,如果可以接受自动反色的结果,那么便不需要做其他的适配工作。SDK版本要求:10053及以上

自动反色

首先在手机上打开深色模式,然后进入米家APP,在“我的”->“实验室功能”中打开“插件深色模式”开关,进入插件便可看到效果。

如果发现自动反色中大部分效果是可以接受的,但是少部分的控件颜色反色效果不太理想,开发者可以自行适配这部分的控件颜色

手动适配

1、期望控件颜色无论是否深色模式都显示一个颜色

在控件的颜色代码前加上"xm"即可,例如对于“#1A1A1A”颜色的控件想在深色模式下依旧显示为“#1A1A1A”,那么可以把颜色改为“xm#1A1A1A”,SDK不会对代码前加了“xm”的颜色进行反色处理

2、期望自己接手适配部分控件颜色

如果对SDK自动反色的效果大部分都很满意,但少数控件的效果不理想,那么可以自己接手这部分控件的颜色适配,具体写法类似backgroundColor: DarkMode.getColorScheme() === 'dark' ? 'xm#000000' : 'xm#ffffff'

3、期望自己接手适配所有控件的颜色

在适配前需要调用DarkMode.preparePluginOwnDarkMode()关闭SDK的自动反色,然后调用DarkMode.getColorScheme() 获取当前颜色模式,根据返回值拿到的值进行适配。

也可使用SDK提供的DynamicColor,此对象接受两个参数,分别是浅色模式和深色模式下的颜色值,使用这种方法不需要在颜色值前加上“xm”,但依旧需要关闭自动反色,具体用法请参考com.xiaomi.demo中Main->Host->DarkMode下的index.js示例

监听颜色变化

添加监听:DarkMode.addChangeListener

移除监听:DarkMode.removeChangeListener

3、隐私政策,用户协议深色模式不显示

Android:在Android上,WebView开启了自动反色功能,在Android9以上的版本无需适配,但是在Android9这个版本上,请参考此处Android9/iOS上隐私协议深色模式下全黑,WebSettings.setForceDark()只在API29以上才可以使用,Android9为28,无法使用这个API,也就不能自动反色,需要自己适配。

iOS:iOS的WebView不会自动反色,需要开发者自己在html中适配@media (prefers-color-scheme: dark)

4、Android上未开启“插件深色模式”,但部分页面和UI依旧是深色模式

这是正常现象,在插件中miot/ui路径下的Dialog,位置管理,设备共享,智能场景,帮助与反馈,网络信息,安全设置,设备时区,法律信息等页面都是Native页面,由于米家APP开启了深色模式,所以这些页面也都会以深色模式的样式呈现。