鸿蒙ArkTS 自定义底部导航栏(Tabs+@Builder 极简实现)

1. 整体架构

采用鸿蒙原生Tabs + TabContent 组件实现底部导航,Tabs作为导航容器,TabContent承载每个页面内容,通过配置将导航栏固定在页面底部。

2. 状态管理

使用@State装饰器定义currentIndex,记录当前选中的Tab索引;TabsonChange事件监听切换动作,实时更新索引值,驱动UI状态刷新。

3. 自定义Tab样式

通过@Builder装饰器封装通用导航栏构建函数,接收索引、标题、默认图标、选中图标 四个参数,通过三目运算符判断当前索引是否为选中态,自动切换图标和文字颜色,实现统一的导航栏样式。

4. 关键配置

  • barPosition(BarPosition.End):将导航栏固定在底部
  • scrollable(false):禁止页面滑动切换,贴合常规App交互
  • 固定导航栏高度、设置背景色,保证UI规整

完整精简代码

typescript 复制代码
@Entry
@Component
struct BarCustomPage {
  @State currentIndex: number = 0;

  build() {
    Tabs() {
      TabContent() {
        Text('首页')
      }.tabBar(this.barBuilder(0, '主页', $r('app.media.icon_home'), $r('app.media.icon_home_selected')))

      TabContent() {
        Text('消息')
      }.tabBar(this.barBuilder(1, '消息', $r('app.media.icon_message'), $r('app.media.icon_message_selected')))

      TabContent() {
        Text('我的')
      }.tabBar(this.barBuilder(2, '我的', $r('app.media.icon_mine'), $r('app.media.icon_mine_selected')))
    }
    .barPosition(BarPosition.End)
    .scrollable(false)
    .onChange((index: number) => {
      this.currentIndex = index;
    })
    .backgroundColor('#FFFFFF')
    .width('100%')
  }

  @Builder
  barBuilder(index: number, title: string, icon: Resource, iconSelected: Resource) {
    Column() {
      Image(this.currentIndex === index ? iconSelected : icon)
        .width(25)
        .height(25)
      Text(title)
        .fontSize(12)
        .fontColor(this.currentIndex === index ? '#0491d1' : '#8a8a8a')
        .fontWeight(FontWeight.Medium)
    }
    .justifyContent(FlexAlign.Center)
    .height(56)
  }
}

🔥 专属服务

【关于我】

  • CSDN 技术分享者
  • 专注[各种技术]分享
  • 已帮助10000+开发者

【能帮你】

  • 🎯 技术答疑
  • 📚 学习规划
  • 💼 项目指导

**📱 添加微信:最下方的微信名片(备注"CSDN")

相关推荐
想你依然心痛6 小时前
HarmonyOS 6 悬浮导航 + 沉浸光感:打造鸿蒙智能体驱动的沉浸式会议效率助手
华为·ar·harmonyos·智能体
●VON9 小时前
BodyAR 从零开始:开发环境搭建与完整项目配置指南
华为·harmonyos·鸿蒙·新特性
2301_7803567010 小时前
加入开源鸿蒙生态:全视通与开鸿启源共建智慧医康养新场景
harmonyos
●VON11 小时前
鸿蒙Flutter实战:Emoji心情选择器组件
flutter·华为·harmonyos
前端不太难11 小时前
鸿蒙 PC 为什么需要新的组件体系?
华为·状态模式·harmonyos
nashane12 小时前
HarmonyOS 6学习:解决图片下载后无法在图库中查看的权限与路径问题
学习·华为·harmonyos
●VON12 小时前
鸿蒙 BodyAR 技术全景解读:从芯片到应用的人体骨骼追踪
华为·harmonyos·新特性
●VON12 小时前
鸿蒙Flutter实战:列表延时错峰入场动画
flutter·华为·harmonyos
Swift社区12 小时前
鸿蒙 PC 开发:传统前端经验为什么会失效?
前端·华为·harmonyos