介绍
本示例展示多种应用主题切换。通过创建 base 同级资源文件夹 dark 和 light 完成深色浅色主题相关资源配置,实现深色浅色主题切换,在 ThemeConst 文件中配置自定义主题文件,通过控制变量实现多主题切换。
通过 @ohos.application.abilityManager 能力,对Ability状态进行修改:其中AbilityManager.updateConfiguration()通过修改colorMode属性来更新配置系统主题颜色。
效果预览
使用说明:
- 点击头部切换主题按钮,选择想要切换的主题。
- 系统深浅模式切换,应用主题自动跟随切换深浅模式。
工程目录
代码语言:shell复制entry/src/main/ets/
|---models
| |---ThemeConst.ets // 统一放置更换的主题资源
|---utils
| |---ThemeGet.ets // 根据全局变量theme来控制主题模式
|---pages
| |---Components
| |---TitleBar.ets // 头部导航栏,主题切换的控制
| |---Index.ets // 首页
entry/src/main/resources/
|---base // 默认资源库
| |---element // 字体相关资源
| |---media // 图片资源
| |---profile
|---dark // 黑夜模式资源
| |---element
| |---media
|---light // 白天模式资源
| |---element
| |---media
具体实现
- 三种模式资源统一放在ThemeConst内,在ThemeGet中定义全局变量theme控制主题模式(0:黑夜 1:白天 3:自定义主题),步骤如下,
- 1)整理主题资源:例如创建系统主题dark,light和自定义主题custom相关目录,并完善需要切换的资源比如icon、color等,系统主题下的相同资源,资源名称必须相同,比如dark下title.icon和light下title.icon
- 2)定义资源池函数引用需要切换的主题资源,需要主题切换的资源通过getTheme(this.theme).资源名,实现组件对资源的动态引用和动态渲染。
- 3)定义全局变量@storagelink('theme')
- 4)定义事件修改变量theme的值,如果是系统主题(dark,light),调用AbilityManager.updateConfiguration(),通过修改colorMode属性来更新配置系统主题颜色(0:深夜 1:白天)
- 5)自定义主题无须修改系统配置,只需修改theme全局变量的值,全局变量会通过@storagelink双向绑定机制,自动重新渲染绑定了theme值的组件
依赖
不涉及。
下载
如需单独下载本工程,执行如下命令:
代码语言:shell复制git init
git config core.sparsecheckout true
echo code/Project/ApplicationHap/ApplicationThemeSwitch/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master
写在最后
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力;
- 关注小编,同时可以期待后续文章ing