HarmonyOS 鸿蒙Next从 HDS 风格统一出发:沉浸光感 HdsButton 的探索、封装与发布

HarmonyOS 鸿蒙Next从 HDS 风格统一出发:沉浸光感 HdsButton 的探索、封装与发布

开头:为什么做这个

HDS(HarmonyOS Design System)强调的是跨设备、跨场景的一致视觉体验与设计品质。 在实际开发中,我遇到一个很典型的问题:沉浸光感材质效果目前主要依赖 HdsTabs 的悬浮态能力,官方没有给出可直接复用的自定义 Button 组件和对应材质接口。

这带来两个现实痛点:

  • 想做统一 HDS 风格的浮动操作入口时,重复造轮子成本高
  • 业务项目里容易出现“每个页面都自己拼一版”的视觉不一致

所以这次我做了两件事:在现有能力边界内完成组件化封装,并尝试发布到 ohpm 三方库,让更多开发者可以直接复用。

正文:怎么做的

第一步:确认能力边界,先不做“万能组件”假设

我先把边界讲清楚:当前材质能力来自 HdsTabsbarFloatingStyle,并不是通用于任意容器的独立材质按钮接口。 因此思路不是“重新发明一个材质系统”,而是基于已稳定的 HDS 能力做可复用封装。

第二步:围绕常见场景做组件封装

组件提供了高频配置能力(尺寸、图标、材质、布局、事件、内容槽位),并保持默认即用。 下面 4 张 GIF 分别对应真实示例场景:

1) 开箱即用:基础用法

默认配置下即可接入,先保证功能和风格快速落地。

基础用法

2) 语义定制:自定义图标

通过图标替换对齐业务语义,又不破坏整体 HDS 视觉语气。

自定义图标

3) 视觉密度:自定义尺寸

可以按页面布局密度调整按钮尺寸和留白,兼顾可读性与层次感。

自定义尺寸

4) 可扩展:自定义内容槽位

通过 @BuilderParam 尾随闭包覆盖默认内容,支持更个性化的表达方式。

自定义内容

第三步:组件发布到 ohpm,降低复用门槛

当能力稳定后,发布为 hds_button,让接入成本从“二次实现”变成“安装 + 配置”。 安装方式如下:

ohpm install hds_button

这种发布方式的价值是:统一体验可以被复用,团队间也更容易保持设计一致。

踩坑/总结

这次实践里,我最重视的不是“功能堆叠”,而是“边界清晰 + 体验统一”。

  1. 技术边界必须讲清楚 材质能力依赖 HdsTabs 悬浮态,不能对外表述成“任意场景都可直接复用的材质按钮”。

  2. 统一不等于单一 HDS 统一的是设计语言,不是禁止定制。尺寸、图标、内容都可定制,但视觉语气要一致。

  3. 组件化的真正收益在传播 从项目内复用走向 ohpm 公开发布,才真正让这套实践产生更大价值和曝光。

结尾:互动

如果你也在做 HarmonyOS 组件封装,欢迎一起讨论:

  • 你在项目里是如何平衡“统一风格”和“业务定制”的?
  • 对沉浸光感材质这类能力,你更倾向场景封装还是通用抽象?
  • hds_button 还有什么点值得优化封装的地方?

更多关于HarmonyOS 鸿蒙Next从 HDS 风格统一出发:沉浸光感 HdsButton 的探索、封装与发布的实战教程也可以访问 https://www.itying.com/category-93-b0.html

13 回复

感谢大佬分享,学习了。

更多关于HarmonyOS 鸿蒙Next从 HDS 风格统一出发:沉浸光感 HdsButton 的探索、封装与发布的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢大佬分享 学习了

学习了,

很好,用了以下,不过使用的时候还是有些布局上的小问题,比如圆角,边距啊这些,还是期待官方的组件吧,希望官方能出一些常用的布局组件Row、Column、Flex等的沉浸光感支持。

后续是否支持自动取色功能,根据图标产品等自主提取主色系,锁住光感色彩不溢出

可以支持自定义光效颜色lightColor吗

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

这个是发光效果的,我之前有尝试过。都没成功等我有空研究研究,

后续是否可以在column row Search等组件上也实现这种效果,

这个牛逼啊真的,

学习了

HdsButton是鸿蒙Next基于HDS设计系统开发的组件,实现了沉浸光感视觉风格。它通过统一的设计语言封装了按钮交互状态,包括默认、按下、禁用等,并支持动态光效反馈。开发者可直接集成使用,确保界面风格与系统一致。

这是一个非常出色的实践,完美诠释了如何基于现有HDS能力进行创造性封装和社区贡献。你的工作准确地解决了当前开发中的一个痛点——在官方未提供独立材质组件时,如何高效、一致地实现HDS风格的交互元素。

技术实现评价:

  1. 边界清晰:明确指出能力源于HdsTabs.barFloatingStyle,避免了误导,体现了严谨性。这种“基于稳定能力封装”的思路是当前阶段的务实最佳选择。
  2. 封装设计合理:提供的配置项(尺寸、图标、布局、@BuilderParam槽位)覆盖了高频定制场景,在保持HDS视觉核心(光感、毛玻璃效果)的同时,赋予了足够的灵活性。开箱即用与深度定制兼顾。
  3. 发布流程完整:将组件发布至ohpm,是让价值最大化的关键一步。它降低了复用门槛,从“代码拷贝”升级为“依赖管理”,极大地促进了团队间和社区内的设计一致性。

关于你提出的互动问题:

  • 统一与定制的平衡:你的组件本身就是优秀范例。通过暴露有限的、可控的定制参数(如sizeicon)来满足业务差异,同时严格保留核心视觉样式(背景材质、圆角、阴影等),确保“语气”统一。
  • 场景封装 vs 通用抽象:对于沉浸光感这类与特定交互状态(如悬浮)强关联的能力,场景化封装是更优解。直接提供一个HdsButton比提供一个抽象的“光感材质函数”更符合开发者心智,也更稳定。通用抽象应留给官方底层API去实现。
  • 优化建议:当前封装已很完善。未来可观察官方HDS动态,若推出独立的材质API,组件内部可平滑迁移。此外,可考虑增加对disabled状态的视觉处理,以及更精细的动画曲线配置,以覆盖更复杂的交互场景。

你的实践不仅提供了一个即用的按钮组件,更重要的是展示了一种基于HarmonyOS生态的共建模式:洞察缺口、清晰封装、积极分享。这对于丰富HarmonyOS Next的三方库生态具有重要意义。

回到顶部