news 2026/7/6 1:40:32

HarmonyKit | 鸿蒙新特性规范:10 个工具页 UI 一致性设计系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyKit | 鸿蒙新特性规范:10 个工具页 UI 一致性设计系统

HarmonyKit | 鸿蒙新特性规范:10 个工具页 UI 一致性设计系统

从混乱中提炼模式

当 HarmonyKit 只有 3 个工具时,每个页面的 UI 结构是"随手写的"。JSON 格式化页面的返回按钮是圆的,Base64 页面的返回按钮是文字链接,时间戳转换页面根本没有返回按钮——因为它还没有从主页解耦出来。

这种不一致在只有 3 个页面时还可以忍受。但当工具扩展到 10 个时,维护 10 种不同的 UI 模式变得不可持续。用户每次打开新工具都需要"重新学习"这个页面的操作逻辑——按钮在哪、输出在哪、怎么复制。

于是提炼出了一个统一的页面模板。这个模板不是凭空设计的——它是从 10 个工具页中提取出来的"最大公约数"。每个工具页面都遵循这个模板,差异只体现在输入控件的选择和操作按钮的布局上。

项目仓库:https://atomgit.com/VON-/harmony-kit

页面模板:五区模型

┌─────────────────────────────┐ │ [返回] 工具名称 │ ← 头部区 ├─────────────────────────────┤ │ │ │ [输入区域] │ ← 输入区 │ TextArea / TextInput │ │ │ │ [选项] [操作1] [操作2] │ ← 操作区 │ │ │ 输出 [复制] │ ← 输出标签 │ [输出区域] │ ← 输出区 │ TextArea (只读) │ │ │ └─────────────────────────────┘



五个区域的职责清晰:

头部区:返回导航 + 页面标题。所有工具页使用相同的头部样式——32px 圆形返回按钮 + 18px Medium 字重的标题。`

输入区:用户输入数据的地方。根据工具类型不同,输入区有四种形态:

  • 单行 TextInput(时间戳、进制、颜色值)
  • 多行 TextArea(JSON、Base64、URL、正则表达式、哈希文本、文本统计)
  • 双输入区(时间戳转换的"戳→日期"和"日期→戳"两个面板)
  • 带前置符号的输入(颜色 HEX 输入前面有#号)

操作区:按钮和选项的组合。有五种布局模式:

  • 单按钮(文本统计:实时反馈,按钮不是必须的)
  • 双按钮(Base64:编码 | 解码)
  • 按钮组 + 选项(JSON:2空格 | 4空格 | 格式化 | 压缩)
  • 选项组 + 按钮(正则:g | i | m + 匹配按钮)
  • 双向面板(时间戳:每个面板有独立的按钮)

输出标签Text('输出')+CopyButton。这个标签行的存在有两个目的:一是告诉用户"这是结果区域",二是提供一个复制入口。复制按钮是每个工具页输出区的标配——因为"复制结果到剪贴板"是最高频的后续操作。

输出区:只读的 TextArea 展示处理结果。高度根据预期输出长度调整——哈希结果 100vp(哈希值很短),JSON 格式化结果 200vp(格式化后的 JSON 通常较长)。错误信息如果存在,用红色文本展示在操作区和输出区之间。

输入控件的四种形态

单行 TextInput

适用工具:时间戳转换、颜色转换(HEX 输入和 RGB 输入)、进制转换。

单行输入的特点是可以设置type属性来匹配键盘类型:

TextInput({text:this.tsInput,placeholder:'输入 Unix 时间戳(秒)'}).type(InputType.Number).fontFamily('monospace').backgroundColor('#ffffff').borderRadius(8).padding(12)

时间戳输入使用InputType.Number唤起数字键盘,避免用户输入字母。等宽字体确保数字对齐清晰。

多行 TextArea

适用工具:JSON 格式化、Base64 编解码、URL 编解码、正则测试器、哈希计算、文本统计。

多行输入的高度根据工具的典型输入长度设置:

  • JSON 格式化:160vp(JSON 字符串通常较长)
  • Base64/URL:140-150vp(编码输入通常短)
  • 正则测试文本:120vp(测试文本有长有短,取中值)
  • 文本统计:180vp(最长——用户可能粘贴大段文本)

双输入区

时间戳转换是唯一使用双输入面板的工具。页面分为上下两个独立的"输入→操作→输出"流程:

  • 上半部分:时间戳 → 日期时间
  • 下半部分:日期时间 → 时间戳

两个面板之间用Divider()分割。

带前置符号的输入

颜色转换的 HEX 输入前有一个#符号:

Row(){Text('#').fontSize(14).fontFamily('monospace').fontColor('#666');TextInput({text:hexInput.replace('#',''),placeholder:'007aff'}).layoutWeight(1)}

用户只需要输入007aff,系统自动在展示结果时加上#。这减少了用户的输入工作量,也避免了用户输入错误格式(如#007aff变成##007aff)。

操作按钮的五种布局

单按钮模式

文本统计工具没有独立的操作按钮——统计是随着输入实时更新的。这是唯一不需要"执行"按钮的工具。

双按钮模式

Base64 和 URL 编解码使用两个并排按钮:

Row(){Button('编码').backgroundColor('#007aff')// 主操作:蓝色Button('解码').backgroundColor('#34c759')// 辅操作:绿色}

颜色语义让用户无需文字即可区分主次操作。

按钮组 + 选项模式

JSON 格式化在操作区左侧放置选项按钮(2空格/4空格),右侧放置操作按钮(格式化/压缩)。选项按钮使用是否选中状态的高亮——选中时蓝色背景白色文字,未选时灰色背景暗色文字。

选项组 + 按钮模式

正则测试器在操作区左侧放置标志位选择(g/i/m),右侧放置匹配按钮。标志位按钮是独立的 toggle——可以同时激活多个。哈希计算在左侧放置算法选择(MD5/SHA1/SHA256),右侧放置计算按钮。算法选择是互斥的——只能选一个。

双向面板模式

时间戳转换有两个独立的面板,每个面板有自己的"转换"按钮。这种设计避免了"模式切换"——用户不需要在"时间戳→日期"和"日期→时间戳"之间切换,两个操作同时可见。

输出区域的三要素

每个工具页的输出区域都包含:

  1. 标签行Row() { Text('结果').fontSize(13).fontColor('#666'); Blank(); CopyButton({ text: output }); }

  2. 结果展示TextArea({ text: this.output }).fontSize(13).fontFamily('monospace')。只读——用户只能复制不能编辑。

  3. 错误提示if (errorMsg) { Text(errorMsg).fontSize(12).fontColor('#ff3b30') }。错误信息在操作区和输出区之间展示,位置固定,用户知道该去哪里看错误。

颜色语义的统一化

10 个工具页共享同一套颜色语义:

颜色色值语义使用场景
蓝色#007aff主操作格式化、编码、转换、匹配、计算
绿色#34c759辅助操作/成功压缩、解码
橙色#ff9500变更操作另一种解码模式
红色#ff3b30错误/警告错误提示文字
灰色#666/#999元信息标签、描述、占位符

用户在新工具页看到蓝色按钮时,不需要思考就知道"这是主要操作"。看到红色文字时,立刻知道"这是错误信息"。颜色的稳定语义减少了学习成本。

页面模板的局限性

统一的模板虽然保证了 10 个工具页的一致性,但也带来了一个问题:工具页的"个性化"空间被压缩了。如果一个工具需要完全不同的交互模式(比如需要两个输出区、或需要图表展示、或需要拖拽操作),这个模板就不适用了。

对于首版的 10 个工具来说,统一的模板是利大于弊的选择。未来如果有新工具需要跳出模板——比如二维码生成需要一个 Canvas 区域——这时不是"修改模板",而是创建一个新的页面类型。

项目仓库:https://atomgit.com/VON-/harmony-kit

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

基于51/STM32单片机智能无线蓝牙音乐喷泉频谱灯音乐盒音箱播套件21(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

基于51/STM32单片机智能无线蓝牙音乐喷泉频谱灯音乐盒音箱播套件21(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 功能说明: 采用51/STM32F103C8T6单片机进行数据处理HM-18蓝牙音频模块进行无线数据传输, 传输距离可达…

作者头像 李华
网站建设 2026/7/6 1:36:29

基于STM32单片机的智能家居 防火防盗 报警系统 震动报警GSM短信23(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于STM32单片机的智能家居 防火防盗 报警系统 震动报警GSM短信23(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 功能说明 : STM32F103C8T6单片机进行数据处理LCD1602液晶显示当前信息和参数 第一行表示当前温度…

作者头像 李华
网站建设 2026/7/6 1:36:05

2026最新5款基础版免费AI编程工具中文vibe coding平替实测合集

一、开篇综述Cursor作为AI原生编辑器标杆,依托VS Code同源架构,Composer多文件批量修改能力在海外vibe coding圈认可度很高,单英文需求下代码生成连贯性表现稳定,是我过去一年长期使用的开发工具。我的项目有大量 API 接口对接&am…

作者头像 李华
网站建设 2026/7/6 1:35:09

2026最新5款Copilot平替之选|开发者实测AI编程工具深度对比

GitHub Copilot 凭借成熟的IDE生态、极速行内补全能力,长期是主流开发者的常备编程助手,插件适配性广、基础补全稳定性强,适配绝大多数常规开发场景。这篇文章源于一个赌局:同事说 AI 编程工具能提升 50% 效率,我不信&…

作者头像 李华
网站建设 2026/7/6 1:35:05

2026最新8款AI编程工具平替实测深度对比

这篇文章的特别之处在于:我不是逐个工具介绍,而是按我遇到的具体开发难题来组织,看 5 款工具各自的解决思路。2025年11月我作为全栈独立开发者,接了公司内部运营后台项目「猎户座」的迭代需求,要在一周内完成权限体系重…

作者头像 李华