鸿蒙开发案例:健康App(3)首页Tabs

 系列文章目录

鸿蒙开发案例:健康App(1)欢迎页面Ul实现

                         健康App(2)欢迎页面业务

                         健康App(3)首页Tabs

                         健康App(4)饮食记录-顶部搜索栏 

                         健康App(5)饮食记录-统计卡片

                         健康App(6)饮食记录-记录列表


前言

案例来源于黑马程序员的课程


案例介绍

首页Tabs

一、整体思路

使用tabs组件可以实现页面内视图内容快速切换,包含TabBar和Tabcontent两个部分,此次页面包含三个视图。

vertical(false)横向布局 BarPosition.End 表示下面
vertical(true)纵向布局 BarPosition.End 就表示右

二、实现步骤

 定义一个构建函数,自定义tabar
选中颜色,根据来显示颜色,选中绿色,未选中灰色
调用selectColor方法来选择文本,图标颜色。

 @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))
    }
  }

如果index等于currentIndex,则返回绿色,否则返回灰色。

  selectColor(index: number){
    return this.currentIndex === index ? $r('app.color.primary_color') : $r('app.color.gray')
  }

build 方法:
构建了包含三个标签页的标签栏(TabBar)。每个标签页都包含一个TabContent,并设置了其tabBar属性用来显示自定义的标签栏项。
onChange 回调用于处理标签切换事件,并更新currentIndex。
vertical(false) 假设用于设置标签栏为水平方向
使用了$r函数来引用资源

  build() {
    Tabs({barPosition:BarPosition.End}){
      TabContent(){
        Text('饮食记录')
      }
      .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)
    .vertical(false)
  }
}

总结

完整代码如下:

// src/main/ets/pages/Index.ets

import { CommonConstants } from '../common/constants/CommonConstants'
@Entry
@Component
struct Index {
  @State currentIndex: number = 0

  // 定义一个构建函数,自定义tabar
  @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(){
        Text('饮食记录')
      }
      .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)
    .vertical(false)
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值