鸿蒙个人项目-首页Tabs


前言

欢迎来到我的鸿蒙个人项目首页!在这里,精心打造了一系列标签页(Tabs),希望能够提供一个直观、便捷的界面,以便用户能够快速浏览和访问项目中的关键信息和功能。随着项目的不断发展,我们将继续完善Tabs模块的功能和内容。


模块一Tabs组件:

Tabs组件可以实现页面内视图内容快速切换,包含TabBar和TabContent两个部分。

Tabs({barPosition:BarPosition.End}){
      TabContent(){
      RecordIndex()
      }
      .tabBar(this.TabBarBuilder($r('app.string.tab_record'),$r('app.media.ic_calendar'),0))

      TabContent(){
        Text('发现页面')
      }

      .tabBar(this.TabBarBuilder($r('app.string.tab_discover'),$r('app.media.discover'),1))
      TabContent(){
        Text('我的主页')
      }

这段代码定义了一个 Tabs 组件,其中 barPosition 被设置为 BarPosition.End,表示标签栏的位置在底部。内部包含了三个 TabContent 部分:第一个 TabContent 中包含了 RecordIndex 组件,其对应的标签栏通过 TabBarBuilder 函数进行构建,标签文字为 $r('app.string.tab_record'),图标为 $r('app.media.ic_calendar'),索引为 0。第二个 TabContent 中只有文本 发现页面,其标签栏的文字为 $r('app.string.tab_discover'),图标为 $r('app.media.discover'),索引为 1。第三个 TabContent 中只有文本 我的主页,但没有关于其标签栏的更多详细配置。总的来说,这段代码定义了一个具有底部标签栏和三个不同内容页面的布局结构。 

二、TabBarBuilder 函数

TabBarBuilder 函数用于构建每个标签的栏内容,包括一个图片和一个文本,并通过 selectColor 函数根据当前选中状态设置颜色。在 build 方法中,使用 Tabs 组件创建了底部标签栏的布局。其中包含了三个标签内容,分别是 RecordIndex发现页面 和 我的主页,每个标签都通过 TabBarBuilder 函数设置了对应的标题、图标和索引。、当标签切换时,通过 onChange 事件更新 currentIndex 的值。

代码如下:

@Builder TabBarBuilder(title:ResourceStr,image:ResourceStr,index:number){
  Column({space:CommonConstants.SPACE_8}){
    Image(image)
      .width(22)
      .fillColor(this.selectColor(index))
    Text(title)
      .fontSize(14)
      .fontColor(this.selectColor(index))
  }
}
selectColor(index:number){
    return this.currentIndex === index ? $r('app.color.primary_color'): $r('app.color.gray')
}

实现页面截图

代码示例

import { CommonConstants } from '../common/constants/CommonConstants'
import RecordIndex from '../view/record/Recordindex'
@Entry
@Component
struct Index {
  @State currentIndex:number=0
@Builder TabBarBuilder(title:ResourceStr,image:ResourceStr,index:number){
  Column({space:CommonConstants.SPACE_8}){
    Image(image)
      .width(22)
      .fillColor(this.selectColor(index))
    Text(title)
      .fontSize(14)
      .fontColor(this.selectColor(index))
  }
}
selectColor(index:number){
    return this.currentIndex === index ? $r('app.color.primary_color'): $r('app.color.gray')
}

  build() {
    Tabs({barPosition:BarPosition.End}){
      TabContent(){
      RecordIndex()
      }
      .tabBar(this.TabBarBuilder($r('app.string.tab_record'),$r('app.media.ic_calendar'),0))

      TabContent(){
        Text('发现页面')
      }

      .tabBar(this.TabBarBuilder($r('app.string.tab_discover'),$r('app.media.discover'),1))
      TabContent(){
        Text('我的主页')
      }
      .tabBar(this.TabBarBuilder($r('app.string.tab_user'),$r('app.media.ic_user_portrait'),2))

    }.width('100%')
    .height('100%')
    .onChange(index => this.currentIndex=index)
  }
}


总结

这段代码构建了一个自定义的索引结构 Index ,整体设计逻辑清晰,功能明确。通过使用状态变量 currentIndex 来跟踪当前选中的标签索引,实现了页面状态的动态管理。TabBarBuilder 函数的设计巧妙,它能够根据传入的参数生成统一风格的标签栏内容,包括图片和文本,并通过 selectColor 函数根据选中状态动态设置颜色,增强了用户交互的可视化效果。在 build 方法中,利用 Tabs 组件创建底部标签栏布局,清晰地定义了三个不同的标签内容及其对应的标签栏样式。通过 onChange 事件及时更新 currentIndex 的值,保证了状态的同步和页面的响应性。这段代码展示了一种良好的组件化和状态管理的编程模式,具有较高的可维护性和扩展性。它可以方便地应用于各种需要底部标签导航的应用场景。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值