HarmonyOS 鸿蒙Next Overlay机制实现切换主题功能

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Overlay机制实现切换主题功能

  1. 介绍

基于资源Overlay机制,实现切换主题(换肤)功能,可切换文本、颜色、图像等资源。

相关概念:Overlay机制

完整示例:gitee源码地址

实现效果:

cke_3559.gif

  1. 环境搭建

软件要求:

  • DevEco Studio 版本:DevEco Studio 4.1.3.700。
  • HarmonyOS SDK版本:API version 10。

硬件要求:

  • 设备类型:华为手机或运行在DevEco Studio上的华为手机设备模拟器。
  • HarmonyOS系统:4.0.0。

环境搭建:

1.安装DevEco Studio,详情请参考下载和安装软件

2.设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:

  • 如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
  • 如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境

3.开发者可以参考以下链接,完成设备调试的相关配置:

  1. 代码结构解读

本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在gitee中提供。

├──entry/src/main/ets

│ ├──Theme.ets // 切换主题核心代码

│ │ ├──pages

│ │ │ └──Inex.ets // 应用主页

└──entry/src/main/resources // 默认的蓝色主题资源文件目录

└──green/src/main/resources // 绿色主题资源文件目录

└──red/src/main/resources // 红色主题资源文件目录

  1. 切换主题核心代码封装

代码文件路径:entry\src\main\ets\Theme.ets

实现设置主题的方法:

cke_3562.png

为了让数据能自动更新,添加主题改变事件和主题数据类:

cke_3563.png

定义获取主题数据的通用方法:

cke_3564.png

定义获取主题数据的具体方法:

cke_3565.png

  1. 完整实现切换主题功能

先定义主题相关的文本、颜色、图片资源:

entry/src/main/resources/base/element/string.json

cke_3566.png

entry/src/main/resources/base/element/color.json

cke_3567.png

entry/src/main/resources/base/media/bg.png

cke_3568.png

然后创建相关主题数据状态:

cke_3569.png

编写UI并绑定主题数据:

cke_3570.png

cke_3571.png

创建主题共享包HSP,例:绿色主题green

cke_3572.png

cke_3573.png

cke_3574.png

定义绿色主题数据资源:

green/src/main/resources/base/element/string.json

cke_3575.png

green/src/main/resources/base/element/color.json

cke_3576.png

green/src/main/resources/base/media/bg.png

cke_3577.png

同理创建其他主题资源,即完成。

  1. 注意事项
  • Previewer不支持该功能,需要在模拟器或真机运行。
  • 多个hap包需同时安装

cke_3578.png

  1. 总结

您已经完成了本次的学习,了解到基于资源Overlay机制实现切换主题功能。

3 回复
友友,你写的这个demo非常好,源码可以给我分享下吗?

看到了,源码地址在上面

HarmonyOS 鸿蒙Next实现Overlay机制切换主题功能,主要依赖于系统提供的主题管理和界面绘制能力。通过自定义主题资源,并在应用或系统层面进行主题资源的加载和切换,可以实现界面的主题变换。这包括深浅色模式切换、自定义颜色方案等。开发者需遵循HarmonyOS的UI框架规范,使用ETS或Java/Kotlin等语言进行开发,并在适当的时机调用主题切换接口。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部