当前位置: 首页 > news >正文

羽球联盟 HarmonyOS NEXT 实战系列 (06/20):主题Token、Resource颜色与深色模式准备

文章导读

  • 颜色、字号、间距、圆角集中在 主题定义,页面只引用语义 token。
  • Resource 颜色通过 base 与 dark 资源自动适配深浅色。
  • 少量字符串色保留给 badge/tag 等数据模型字段。

页面效果

个人中心、首页卡片和底部导航应使用同一套主色、背景色、文字层级和圆角节奏,切换深浅色后仍保持可读。

实战拆解

一个资讯应用页面很多,如果每个页面都直接写 #0F7B5F、16、8,视觉会很快失控。羽球联盟把主题拆成 AppColors 和 AppSizes,页面只关心语义:主色、正文色、页面背景、卡片背景、分割线、常用字号和间距。

这里最值得写清楚的是 Resource 颜色和字符串色的边界。会跟随深色模式变化的页面背景、文本、主色,使用 $r 引用资源;作为数据标签传入的 tagColor 仍保留 string,因为 Tag 组件可能需要拼接或从模型读取字符串色。

关键代码

export class AppColors { static readonly primary: Resource = $r('app.color.primary'); static readonly textPrimary: Resource = $r('app.color.text_primary'); static readonly bgPage: Resource = $r('app.color.bg_page'); } export class AppSizes { static readonly s16: number = 16; static readonly r8: number = 8; }

主题 token 把视觉值收束到语义层,页面代码读到的是“主色”和“页面背景”,不是一堆散落数字。

取舍分析

这里的取舍可以从两个方向看:一边要让当前页面足够直观,用户打开后能马上理解入口、状态和反馈;另一边要给后续迭代留下余量,避免把数据处理、视觉样式和跳转逻辑全部写死在同一个地方。颜色、字号、间距和圆角应先有语义,再进入页面。 会随系统外观变化的颜色用资源承载,标签色等数据色保持字符串更灵活。

设计落点

  • 颜色、字号、间距和圆角应先有语义,再进入页面。
  • 会随系统外观变化的颜色用资源承载,标签色等数据色保持字符串更灵活。
  • 深色模式不是最后补丁,而是页面持续使用 token 后自然生效。

易踩坑

  • 不要把 Resource 和 string 颜色混用到难以追踪,先定义语义边界。
  • 不要在卡片内部再发明局部颜色体系,除非它是可复用组件的明确变体。

验证方式

  • 切换系统深浅色,检查背景、正文和分割线可读性。
  • 观察首页、详情页、个人中心是否使用一致间距。
  • 修改主色后确认底部导航和按钮同步变化。

小结

主题Token、Resource颜色与深色模式准备 的价值在于把页面现象和工程边界放在一起看:用户看到的是流畅的入口、列表、详情和反馈,开发者真正维护的是状态、模型和组件之间的关系。这个思路迁移到其他 ArkTS 项目时,比单独记某个 API 更可靠。

http://www.jsqmd.com/news/1129668/

相关文章:

  • 为什么选择AlamofireNetworkActivityIndicator?iOS网络指示器第三方库深度对比
  • INI、YAML、TOML 全支持!ConfigArgParse 多格式配置文件实战指南
  • 为什么选择O-CNN?八叉树CNN对比传统3D深度学习方法的7大优势
  • 终极Windows 11精简指南:使用tiny11builder脚本让你的系统瘦身50%
  • 终极音乐歌词解决方案:163MusicLyrics让你的音乐库完美同步歌词
  • WavTap开发揭秘:从Soundflower到音频捕获神器的演变
  • Readium EPUB阅读器完整攻略:打造专业级电子书阅读体验的终极指南
  • Table To JSON性能优化:处理大型表格的5个专业技巧
  • Wexflow多语言客户端开发:C、Python、Java等语言集成指南
  • AgentKit 内存管理完全手册:持久化与状态共享最佳实践
  • 无需Ruby也能玩VimGolf:Docker容器化解决方案全攻略
  • PostgreSQL表分区实战:使用django-postgres-extra实现高性能数据管理
  • 10分钟上手wordpress-nginx-docker:从环境配置到网站上线的完整教程
  • RWD-Table-Patterns完全指南:如何轻松实现复杂数据的响应式表格设计
  • three.quarks加载与导出:JSON格式与QuarksLoader使用详解
  • Open Source Billing邮件模板定制:专业发票邮件发送设置终极指南
  • resumeio-to-pdf部署教程:使用Docker快速搭建本地简历下载服务
  • 5分钟掌握GTA5最强防护型修改器:YimMenu终极指南
  • CrossPoint Reader 深度解析:380KB RAM 下的 EPUB 渲染奇迹
  • YimMenu终极指南:5分钟掌握GTA5最强修改器的秘密武器
  • Spray用户名生成器完全教程:从常见姓名到用户名格式转换
  • Savant动态参数注入:实时调整AI模型的完整指南
  • OpenAI Responses Starter App扩展开发:如何添加新的AI工具和功能
  • 探索MoveIt2三大规划器:如何为你的机器人选择最佳运动规划方案
  • 从零开始理解JJJJJJJJJJJJJS:webpack站点API接口自动化发现原理
  • 如何用PyTorch-Segmentation-Detection快速训练你的第一个分割模型
  • ZheTian v1.x完整使用指南:从基础到高级的10个技巧
  • 高效构建直播输入可视化:input-overlay开源工具的完整实践指南
  • Cascadia源码解析:从parser.go看CSS选择器的实现原理
  • NVC与FPGA厂商库集成:Xilinx、Altera、Lattice仿真环境搭建终极指南