深色模式常见问题 - 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开启了深色模式,所以这些页面也都会以深色模式的样式呈现。