问题背景
大部分手机主题上会有深色模式和浅色模式之分,浅色模式一般都是“白底黑字”,深色模式则是“黑底白字”。下图是华为手机深色模式和浅色模式的界面效果:
- 图1 浅色模式
文章图片
- 图2 深色模式
文章图片
如何在快应用中实现不同主题模式的适配呢?目前有两种方案:
- 使用MediaQuery响应式布局能力,自动检测用户的设备的系统主题模式,配置不同模式下的css样式。
- 使用device.getThemeSync,根据获取的结果选择不同模式下的css样式。
Hello {{title}}
.container {
flex-direction: column;
justify-content: center;
align-content: center;
align-items: center;
}
.title {
font-size: 100px;
}
/**浅色主题css */
@media (prefers-color-scheme: light) {
.container {
flex-direction: column;
justify-content: center;
align-content: center;
align-items: center;
}
.title {
font-size: 100px;
color: #000000;
}
}
/**深色主题css*/
@media (prefers-color-scheme: dark) {
.container {
flex-direction: column;
justify-content: center;
align-content: center;
align-items: center;
background-color: #000000;
}
.title {
font-size: 100px;
color: #ffffff;
}
}
优点:实现简单,代码少,开发者只需要配置响应式布局中dark和light的css,无需手动控制调用不同主题模式下的css。
方案二:使用device.getThemeSync 步骤1:获取设备的主题模式
可使用device.getThemeSync接口返回值获得,推荐在全局app.ux中实现并将结果保存,对外提供getThemeMode()方法方便每个页面的ux获取主题结果。
app.ux代码如下:
步骤2:页面适配
页面需要实现深色和浅色主题模式下的css样式,根据 步骤1返回的结果选择不同的css样式。下面示例代码.container和.item是浅色主题下的css样式, . containerDarkMode和 . itemDarkMode 是深色主题下的css样式。页面在生命周期onInit()方法中根据获取到的设备主题模式选择不同的css样式。代码如下:
.container {
flex-direction: column;
margin-top: 50px;
align-content: center;
align-items: center;
}
.containerDarkMode {
flex-direction: column;
margin-top: 50px;
align-content: center;
align-items: center;
background-color: #000000;
}
.item {
background-color: #00bfff;
color: #f8f8ff;
font-size: 37px;
width: 50%;
height: 100px;
margin-bottom: 20px;
}
.itemDarkMode {
background-color: #add8e6;
color: #f8f8ff;
font-size: 37px;
width: 50%;
height: 100px;
margin-bottom: 20px;
}
此方案相对方案一稍微复杂一点,需要开发者自己去控制css样式选择。
欲了解更多详情,请参见:
【教你实现华为快应用深色主题适配】快应用开发指导文档:https://developer.huawei.com/consumer/cn/doc/development/quickApp-Guides/quickapp-whitepaper
原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0201404994231590237?fid=18
原作者:Mayism
推荐阅读
- linux驱动学习(兼容安卓)|android编译错误(2)
- linux驱动学习(兼容安卓)|android编译报错(1)
- Android开发|Android10及以上访问公有目录
- Android|Jetpack 系列之替换代替ButterKnife的全新视图工具 ViewBinding的使用详解
- 详细实例教程!集成华为虚假用户检测,防范虚假恶意流量
- Android|44岁万达女高管跳楼(摧毁一个中年人有多容易!)
- android|本来打算年前离职,但是昨天的一次 Android 面试让我心好累……我迷茫了
- android|android ffmpeg rtmp,Android利用ffmpeg产生推流
- 什么是原创(独立完成就是原创吗?)