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

相关推荐
AI创界者7 分钟前
【硬核教程】鸿蒙 HarmonyOS 4.2 / 4.3 完美配置 GMS 运行环境(纯净版/不弹窗/全机型通用)
华为·harmonyos
2501_942389553 小时前
小米寥寥几家车企设计汽车顶棚
华为·编辑器·时序数据库·harmonyos
2501_943782353 小时前
【共创季稿事节】摩斯电码转换器:编码表与双向转换的实现
android·华为·鸿蒙·鸿蒙系统
蓝速科技5 小时前
蓝速科技 RISC-V 鸿蒙信创终端全场景落地方案
科技·harmonyos·risc-v
芒鸽5 小时前
在仓颉语言里造一个没有反射的服务端框架
开发语言·华为·harmonyos
星释5 小时前
鸿蒙智能体开发实战:4.A2A 模式创建智能体
ai·harmonyos·鸿蒙·智能体
binbin_525 小时前
UIAbility 与 WindowStage:窗口创建、加载、销毁的完整链路
开发语言·javascript·深度学习·华为·harmonyos
binbin_525 小时前
WindowStage 多窗口与沉浸式窗口实践:从适配到体验细节
开发语言·javascript·深度学习·华为·harmonyos
Helen_cai5 小时前
OpenHarmony Text 文本组件精细化开发与 API23 + 适配优化
华为·harmonyos