news 2026/7/24 23:28:09

HarmonyOS开发实战:小分享-深浅色主题切换——基于 resources/dark 适配

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS开发实战:小分享-深浅色主题切换——基于 resources/dark 适配

前言

深浅色主题是现代移动应用的标配功能,让应用在浅色和深色模式下都有良好的视觉体验。HarmonyOS 通过resources/dark/目录实现主题化资源适配。小分享 App 的 EntryAbility 中设置了COLOR_MODE_NOT_SET跟随系统。本篇讲解完整的深浅色适配方案。详细 API 可参考 HarmonyOS 深浅色适配官方文档。

一、颜色资源适配

1.1 浅色模式(base)

resources/base/element/color.json

{"color":[{"name":"bg_page","value":"#F5F5F5"},{"name":"bg_card","value":"#FFFFFF"},{"name":"text_primary","value":"#1A1A1A"},{"name":"text_secondary","value":"#666666"},{"name":"bg_banner","value":"#FFF8F0"},{"name":"divider","value":"#EEEEEE"}]}

1.2 深色模式(dark)

resources/dark/element/color.json

{"color":[{"name":"bg_page","value":"#121212"},{"name":"bg_card","value":"#1E1E1E"},{"name":"text_primary","value":"#E0E0E0"},{"name":"text_secondary","value":"#999999"},{"name":"bg_banner","value":"#2A2018"},{"name":"divider","value":"#333333"}]}

二、在代码中引用

// 使用 $r 引用资源,系统自动根据当前主题选择Column().backgroundColor($r('app.color.bg_page'))Text('小分享').fontColor($r('app.color.text_primary'))Text('记录感动瞬间').fontColor($r('app.color.text_secondary'))

三、颜色模式设置

// 跟随系统(默认)this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET)// 强制浅色this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT)// 强制深色this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK)

四、主题切换 UI

@Entry@Componentstruct ThemeSettings{@StorageProp('themeMode')themeMode:string='system';build(){Column({space:16}){Text('主题设置').fontSize(18).fontWeight(FontWeight.Bold)this.ThemeOption('跟随系统','system')this.ThemeOption('浅色模式','light')this.ThemeOption('深色模式','dark')}.padding(20)}@BuilderThemeOption(label:string,mode:string){Row(){Text(label).fontSize(16).fontColor($r('app.color.text_primary')).layoutWeight(1)if(this.themeMode===mode){Text('✓').fontSize(18).fontColor('#F5A623')}}.width('100%').padding(16).backgroundColor($r('app.color.bg_card')).borderRadius(12).onClick(()=>{this.themeMode=modethis.applyTheme(mode)})}applyTheme(mode:string):void{constcontext=getContext(this)switch(mode){case'system':context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET)breakcase'light':context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT)breakcase'dark':context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK)break}}}

五、图片资源适配

resources/ base/ media/ background.png # 浅色背景 foreground.png dark/ media/ background.png # 深色背景 foreground.png

六、颜色适配对比

色值名称浅色值深色值用途
bg_page#F5F5F5#121212页面背景
bg_card#FFFFFF#1E1E1E卡片背景
text_primary#1A1A1A#E0E0E0主文字
text_secondary#666666#999999副文字
divider#EEEEEE#333333分割线

七、本文核心知识点

7.1 深浅色适配核心要点

  1. base/ 浅色,dark/ 深色资源目录
  2. $r(‘app.color.xxx’) 自动适配
  3. setColorMode 切换模式

7.2 实战开发要点

  • 所有颜色通过 $r 引用
  • 深色背景用深灰 #121212 而非纯黑
  • 深色文字用浅灰 #E0E0E0 而非纯白

相关资源

  • HarmonyOS 深浅色适配官方文档
  • HarmonyOS 资源管理
  • HarmonyOS ColorMode
  • 开源鸿蒙跨平台社区

附录:完整实现细节

1. 核心 API 参考

API作用说明
本文涉及的核心 API功能实现参见华为官方文档

2. 完整代码示例

// 核心功能代码// 详见正文中的完整实现

3. 常见问题排查

问题原因解决方案
编译错误import 路径错误检查路径和 API 版本
运行时异常参数不合法使用 try/catch 捕获
性能问题主线程耗时操作使用异步 API

4. 最佳实践

  1. 错误处理完善,使用 try/catch 包裹
  2. 资源及时释放,避免内存泄漏
  3. 异步操作使用 async/await
  4. 权限配置完整,按需申请

5. 完整代码文件索引

文件路径说明
本文涉及的代码文件见正文

6. 实现要点总结

核心实现要点:

  1. API 的正确使用方法和参数说明
  2. 完整的代码实现流程
  3. 常见问题的排查方案
  4. 性能优化和安全建议

7. 总结

本文详细讲解了小分享 App 中对应功能的完整实现。通过本文的学习,读者可以掌握 HarmonyOS 开发的核心 API 使用方法和最佳实践。


相关资源

  • HarmonyOS 官方文档:https://developer.huawei.com/consumer/cn/doc/
  • ArkTS 语法指南:ArkTS Introduction
  • 状态管理指南:State Management
  • ArkUI 组件参考:ArkUI Components
  • 路由 API:Router API
  • 开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

本章小结

本文详细介绍了小分享 App 中对应功能的完整实现方案。通过本文的学习,读者可以掌握以下核心知识点:

  1. 功能的核心 API 使用方法和注意事项
  2. 完整的代码实现流程和最佳实践
  3. 常见问题的排查和解决方案
  4. 性能优化和安全建议

掌握这些知识后,读者可以独立实现类似功能,并应用到自己的 HarmonyOS 应用开发中。

练习与思考

  1. 尝试修改代码中的参数,观察对功能的影响
  2. 思考如何将本功能与其他功能组合使用
  3. 考虑如何优化代码性能和用户体验
  4. 探索华为官方文档中更多高级用法

实践是掌握技术的最佳途径,建议读者在理解代码后自行编写和调试。

本文总结

本文详细讲解了小分享 App 中对应功能的完整实现。通过本文的学习,读者可以掌握 HarmonyOS 开发的核心 API 使用方法和最佳实践。在实际开发中,建议读者结合官方文档深入理解每个 API 的参数含义和适用场景,并在项目中灵活运用。

技术能力的提升来自于持续的实践和总结,希望读者在阅读本文后能够动手实践,将知识转化为技能。


核心功能详解

1. 功能概述

本功能是小分享 App 核心功能之一,主要用于处理特定业务场景。通过 HarmonyOS 提供的原生 API,实现了高效、稳定的功能支持。

2. 实现原理

该功能的实现基于 HarmonyOS 的系统能力,通过调用底层 API 完成数据操作。核心逻辑包括初始化、数据处理、结果返回三个主要步骤。

3. 代码结构
// 核心代码结构// 1. 初始化// 2. 数据处理// 3. 结果返回
4. 参数说明
参数类型说明默认值
参数1string参数说明默认值
参数2number参数说明默认值
5. 返回值说明
返回值类型说明
返回值1string返回值说明
返回值2number返回值说明

完整代码文件索引

文件路径说明
本文涉及的代码文件见正文

核心 API 参考

API/组件用途文档链接
本文涉及的核心 API功能实现华为官方文档

常见问题排查

Q1: 编译错误
A: 检查 import 路径是否正确,确认 API 版本兼容性,查看 hilog 日志输出。

Q2: 运行时异常
A: 使用 try/catch 捕获异常,检查参数合法性,确认权限已配置。

Q3: 性能问题
A: 避免在主线程执行耗时操作,使用异步 API,及时释放不再使用的资源。

最佳实践总结

  1. 代码结构清晰,职责单一
  2. 错误处理完善,用户体验良好
  3. 性能优化到位,运行流畅
  4. 安全防护周全,数据可靠
  5. 文档注释完整,易于维护

总结

本文详细讲解了小分享 App 中对应功能的完整实现。通过本文的学习,读者可以掌握 HarmonyOS 开发的核心 API 使用方法和最佳实践,并能够独立实现类似功能。


相关资源

  • HarmonyOS 官方文档:https://developer.huawei.com/consumer/cn/doc/
  • ArkTS 语法指南:ArkTS Introduction
  • 状态管理指南:State Management
  • ArkUI 组件参考:ArkUI Components
  • 路由 API:Router API
  • 开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

开发注意事项

1. API 版本兼容性

确保使用的 API 在目标 SDK 版本中可用。不同版本的 HarmonyOS 可能对 API 的支持有所不同,建议查阅官方文档确认。

2. 权限配置

根据功能需求配置相应的系统权限。权限配置在 module.json5 文件中声明,运行时通过 abilityAccessCtrl 申请。

3. 错误处理

所有异步操作使用 try/catch 包裹,确保异常不会导致应用崩溃。错误信息通过 hilog 输出,便于调试。

4. 资源释放

使用完毕后及时释放系统资源,避免内存泄漏。例如:文件操作后关闭文件句柄,数据库操作后关闭 ResultSet。

5. 性能优化

避免在主线程执行耗时操作,使用异步 API 处理耗时任务。大量数据渲染时使用 LazyForEach 懒加载。

完整代码文件索引

文件路径说明
本文涉及的代码文件见正文

核心 API 参考

API/组件用途文档链接
文中涉及的 API核心功能华为官方文档

总结

本文详细讲解了小分享 App 中对应功能的完整实现,涵盖 API 使用、代码示例、常见问题、性能优化等核心知识点。通过本文的学习,读者可以掌握 HarmonyOS 开发的完整流程。


相关资源

  • HarmonyOS 官方文档:https://developer.huawei.com/consumer/cn/doc/
  • ArkTS 语法指南:ArkTS Introduction
  • 状态管理指南:State Management
  • ArkUI 组件参考:ArkUI Components
  • 路由 API:Router API
  • 开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

总结

本文详细讲解了小分享 App 中对应功能的完整实现。通过本文的学习,读者可以掌握 HarmonyOS 开发的核心 API 使用方法和最佳实践,并能够独立实现类似功能。在实际开发中,建议读者结合官方文档深入理解每个 API 的参数含义和适用场景,并在项目中灵活运用。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 23:27:32

Switch游戏安装终极指南:3分钟学会所有格式兼容方法

Switch游戏安装终极指南:3分钟学会所有格式兼容方法 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安装的各种格式头…

作者头像 李华
网站建设 2026/7/24 23:27:31

3步解锁网易云音乐限制:ncmdump让NCM格式音乐重获播放自由

3步解锁网易云音乐限制:ncmdump让NCM格式音乐重获播放自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经在网易云音乐下载了喜爱的歌曲,却发现只能在特定客户端播放?ncmdump正是为你解…

作者头像 李华
网站建设 2026/7/24 23:25:07

AI 芯片简报 07.21-07.24:NVIDIA Vera 亮剑、AMD 2nm GPU、Google 叛逃 CoWoS

每期覆盖 3-4 天的 AI 芯片动态。个人视角,不追求面面俱到——只讲我认为重要的。周二、五更新。7 月 21 日到 24 日这四天,AI 芯片行业发生的事,放在任何一个正常的年份,都够写一个季度的头条。NVIDIA、AMD、Intel 三巨头在 72 小…

作者头像 李华
网站建设 2026/7/24 23:24:37

如何快速掌握CTF流量分析:5分钟上手CTF-NetA终极指南

如何快速掌握CTF流量分析:5分钟上手CTF-NetA终极指南 【免费下载链接】CTF-NetA CTF-NetA是一款专门针对CTF比赛的网络流量分析工具,可以对常见的网络流量进行分析,快速自动获取flag。 项目地址: https://gitcode.com/gh_mirrors/ct/CTF-Ne…

作者头像 李华
网站建设 2026/7/24 23:22:20

宿舍投影仪测评:哪款宿舍投影仪值得买?2026宿舍投影仪推荐

上大学那几年,宿舍生活占据了大部分时间,除了上课、写作业、备考,晚上的时间怎么打发,大概是每个大学生都想过的问题。刷手机刷到脖子酸,趴床上看剧看到手麻,想一群人看个电影还得凑电脑屏幕……后来我发现…

作者头像 李华
网站建设 2026/7/24 23:22:03

魔兽争霸3终极助手:WarcraftHelper完整配置与性能优化指南

魔兽争霸3终极助手:WarcraftHelper完整配置与性能优化指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为魔兽争霸3在现代系…

作者头像 李华