鸿蒙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")

相关推荐
Swift社区2 小时前
为什么“页面跳转”在鸿蒙 PC 上是错误设计?
华为·harmonyos
熬夜敲代码的小N5 小时前
鸿蒙PC开发者必备!GitNext深度测评:一站式Git管理工具
git·华为·harmonyos
秋の本名7 小时前
第一章 鸿蒙生态架构与开发理念
华为·wpf·harmonyos
Ww.xh7 小时前
鸿蒙系统中HTML与Vue集成方案
vue.js·html·harmonyos
前端不太难8 小时前
鸿蒙游戏 CI/CD:为什么你还在手动打包?
游戏·ci/cd·harmonyos
全栈若城8 小时前
HarmonyOS Pen Kit 实战:手写笔轻捏、双击与取色器完整集成
华为·harmonyos·手写笔·harmonyos6
xmdy58669 小时前
Flutter+开源鸿蒙实战|校园易生活Day1 项目初始化搭建+开发环境校验+工程目录规范+第三方库集成+多端屏幕适配+全局底部导航
flutter·开源·harmonyos
想你依然心痛10 小时前
HarmonyOS 6(API 23)实战:打造“空间交互式AR健身私教“——基于Face AR疲劳监测 + Body AR姿态识别的沉浸光感运动系统
ar·restful·harmonyos·悬浮导航·沉浸光感
xmdy586610 小时前
Flutter+开源鸿蒙实战|校园易生活Day2 第三方库批量集成+全局Toast提示+网络状态监听+首页轮播图+资讯卡片布局
flutter·开源·harmonyos