大家好,我是青蓝逐码的云杰。

最近有不少开发者在交流时问到,鸿蒙原生自带的 Tabs 组件虽然好用,但如果想要实现类似 iOS 底部 Tab 栏那种丝滑的“液态”阻尼回弹,以及高级的“沉浸光感”效果,应该怎么做?

在鸿蒙应用开发中,细腻的光影和真实的物理回弹动效确实是提升 UI 质感、打造沉浸式交互体验的关键一环。为了让大家能更轻松地在项目中复用这种高级 UI 效果,告别繁琐的底层手势与动画计算,我封装了一个开源的第三方组件库 @wj/hdsiostabs。本文将带你解锁如何在鸿蒙中快速接入这个拥有沉浸光感与液态手势效果的自定义 TabBar,附完整代码示例与配置指南,让你的应用瞬间“高大上”。

一、先看最终效果

有图有真相,我们先来看看接入 @wj/hdsiostabs 后的最终视觉和交互表现:

通过演示可以看到,该组件不仅具备底层的高级悬浮光感材质,在点击切换时,还带有顺滑的物理弹簧动画,视觉反馈极其细腻。

二、如何下载与接入

在过去,想要实现这样的效果,开发者往往需要自己监听各种手势事件、手写复杂的曲线动画,甚至还要处理材质的渲染。而现在,你只需要简单的两步就能搞定。

1. 下载与安装

本项目已经上架到 OpenHarmony 三方库中心仓(OHPM)。在你的 HarmonyOS 工程的 Terminal(终端)中,只需执行以下命令即可一键下载并安装依赖:

ohpm install @wj/hdsiostabs

2. 基础使用:一键替换原生 Tabs

在页面中,我们只需要导入 HdsIosTabs 组件,并利用 @BuilderwrapBuilder 动态注入你的各个 Tab 页面即可。

import { HdsIosTabs, HdsTabItem } from '@wj/hdsiostabs';

// 1. 使用 @Builder 装饰器定义您的各个 Tab 页面内容
@Builder function HomeView() { 
  Text('首页内容').fontSize(30).fontWeight(FontWeight.Bold) 
}
@Builder function DiscoverView() { 
  Text('发现内容').fontSize(30).fontWeight(FontWeight.Bold) 
}
@Builder function MessageView() { 
  Text('消息内容').fontSize(30).fontWeight(FontWeight.Bold) 
}
@Builder function ProfileView() { 
  Text('我的内容').fontSize(30).fontWeight(FontWeight.Bold) 
}

@Entry
@Component
struct Index {
  // 2. 声明当前被选中的索引
  @State currentIndex: number = 0;

  // 3. 声明底部 TabBar 的数据源
  private tabsData: HdsTabItem[] = [
    { title: '首页', icon: $r('sys.symbol.house'), content: wrapBuilder(HomeView) },
    { title: '发现', icon: $r('sys.symbol.safari'), content: wrapBuilder(DiscoverView) },
    { title: '消息', icon: $r('sys.symbol.message'), content: wrapBuilder(MessageView) },
    { title: '我的', icon: $r('sys.symbol.person'), content: wrapBuilder(ProfileView) }
  ];

  build() {
    Column() {
      // 4. 一键引入组件
      HdsIosTabs({
        tabs: this.tabsData,
        currentIndex: this.currentIndex,
        onTabChange: (index: number) => {
          console.info('用户切换到了 Tab: ' + index);
        }
      })
    }
    .width('100%')
    .height('100%')
  }
}

在这段代码中,最核心的就是 tabsData 数据源的构建。我们将页面视图封装在 @Builder 中,并通过 wrapBuilder 传入组件。这不仅保证了性能,也让代码结构非常清晰。

三、进阶玩法:深度定制品牌主题

如果你对视觉有极高的要求,希望将 TabBar 的风格与你 App 的品牌色完美融合,@wj/hdsiostabs 也暴露了丰富的可选属性供你深度定制。

你可以自由调整选中色、未选中色、指示器底色,甚至是整个容器的宽高:

HdsIosTabs({
  tabs: this.tabsData,
  currentIndex: this.currentIndex,
  
  // --- 可选的自定义样式配置 ---
  selectedColor: '#E92F4F',                          // 修改高亮颜色为品牌红
  unselectedColor: '#182431',                        // 修改未选中时的颜色
  indicatorColor: 'rgba(255, 255, 255, 0.15)',       // 调整液态悬浮指示器的背景颜色
  barContainerHeight: 59                             // 调整 TabBar 的整体高度
})

四、致谢 (Acknowledgments)

本组件在设计和开发的过程中,可以说是站在了巨人的肩膀上,特此向以下优秀的文章与开源项目表示诚挚的感谢:

五、总结

优秀的 UI 动效是留住用户的加分项。通过 @wj/hdsiostabs,我们可以非常轻松地为鸿蒙应用接入极具高级感的液态 TabBar 效果。

  • 追求极速开发:直接传入 tabscurrentIndex 即可,零学习成本。
  • 追求个性化:利用暴露的样式属性,灵活适配各种 App 的主题风格。

本项目基于 Apache License 2.0 协议开源发布,欢迎大家在自己的项目中引入使用!如果在集成过程中有任何疑问,或者有新的功能建议,欢迎在评论区留言交流,我们一起把鸿蒙生态的 UI 组件做得更好。

赶紧去代码里试试吧!


本项目基于 Apache License 2.0 协议开源发布,欢迎大家在自己的项目中引入使用!如果在集成过程中有任何疑问,或者有新的功能建议,欢迎在评论区留言交流,我们一起把鸿蒙生态的 UI 组件做得更好。

赶紧去代码里试试吧!


开源地址与文档:[https://ohpm.openharmony.cn/#/cn/detail/@wj/hdsiostabs]

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐