HarmonyOS应用开发Tabs组件的使用

news2024/12/26 11:16:06

 

@Entry
@Component
struct TabsPage {
  @State currentIndex: number = 0;
  private tabsController: TabsController = new TabsController();
  private controller: TabsController = new TabsController()

  /**
   * 自定义TabBar
   * @param title
   * @param targetIndex
   * @param selectedImg
   * @param normalImg
   */
  @Builder TabBuilder(
    title: string,
    targetIndex: number,
    selectedImg: Resource,
    normalImg: Resource
  ) {
    Column() {
      Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
        //图片大小设置
        .size({ width: 30, height: 30 })
      Text(title)
        //字体颜色设置
        .fontColor(this.currentIndex === targetIndex ? '#007DFE' : '#000000')
          //字体大小设置
        .fontSize(16)
    }
    .width('100%')
    //自定义底部导航栏点击事件
    .onClick(() => {
      this.currentIndex = targetIndex;
      this.tabsController.changeIndex(this.currentIndex);
    })
  }

  build() {
    //底部导航栏
    //BarPosition.Start:位于容器顶部
    //BarPosition.End:位于容器底部
    Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) {
      //底部子项一
      TabContent() {
        //子项一内容
        Column() {
          //顶部导航菜单
          Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
            TabContent() {
              Column() {
                Text('页签一')
                  .width('100%')
                  .height('100%')
                  .textAlign(TextAlign.Center)
                  .fontSize(15)
              }
              .width('100%')
              .height('100%')
              .backgroundColor(0xF2F3F5)
            }
            .tabBar('页签一')

            TabContent() {
              Column() {
                Text('页签二')
                  .width('100%')
                  .height('100%')
                  .textAlign(TextAlign.Center)
                  .fontSize(15)
              }
              .width('100%')
              .height('100%')
              .backgroundColor(0xF2F3F5)
            }
            .tabBar('页签二')

            TabContent() {
              Column() {
                Text('页签三')
                  .width('100%')
                  .height('100%')
                  .textAlign(TextAlign.Center)
                  .fontSize(15)
              }
              .width('100%')
              .height('100%')
              .backgroundColor(0xF2F3F5)
            }
            .tabBar('页签三')

            TabContent() {
              Column() {
                Text('页签四')
                  .width('100%')
                  .height('100%')
                  .textAlign(TextAlign.Center)
                  .fontSize(15)
              }
              .width('100%')
              .height('100%')
              .backgroundColor(0xF2F3F5)
            }
            .tabBar('页签四')

            TabContent() {
              Column() {
                Text('页签五')
                  .width('100%')
                  .height('100%')
                  .textAlign(TextAlign.Center)
                  .fontSize(15)
              }
              .width('100%')
              .height('100%')
              .backgroundColor(0xF2F3F5)
            }
            .tabBar('页签五')

            TabContent() {
              Column() {
                Text('页签六')
                  .width('100%')
                  .height('100%')
                  .textAlign(TextAlign.Center)
                  .fontSize(15)
              }
              .width('100%')
              .height('100%')
              .backgroundColor(0xF2F3F5)
            }
            .tabBar('页签六')
          }
          //设置TabBar宽度
          .barWidth('100%')
          //设置Tabs组件宽度
          .width('100%')
          //设置Tabs组件背景颜色
          .backgroundColor(0xFFFFFF)
          //设置TabBar可滚动
          .barMode(BarMode.Scrollable)
          // .vertical(true) //设置页签位于容器左侧,barPosition属性为BarPosition.End时页签位于容器右侧
        }
        .width('100%')
        .height('100%')
      }
      .tabBar(
        this.TabBuilder(
          '首页',
          0,
          $r('app.media.home_selected'),
          $r('app.media.home_normal')
        )
      )
      //底部子项二
      TabContent() {
        Column() {
          Text('我的')
            .textAlign(TextAlign.Center)
            .width('100%')
            .height('100%')
            .fontSize(15)
        }
        .width('100%')
        .height('100%')
        .backgroundColor('#F2F3F5')
      }
      .tabBar(
        this.TabBuilder(
          '我的',
          1,
          $r('app.media.mine_selected'),
          $r('app.media.mine_normal')
        )
      )
    }
    //底部导航宽度
    .barWidth('100%')
    //底部导航背景色
    .backgroundColor(Color.White)
  }
}

顶部页签不需要自定义TabBar,直接使用Tabs组件就可以实现顶部导航菜单,barWidth属性设置TabBar宽度,width设置Tabs组件宽度,barMode设置TabBar可滚动,vertical属性设置页签位置。

TabContent组件设置页签项内容,tabBar属性设置页签名称。

自定义TabBar用@Builder开头,底部切换导航用自定义TabBar,有四个参数,分别为:页签名称、页签下标、选中图标、未选中图标。

在tabBar属性中引用自定义的TabBar用this.TabBuilder并设置相关参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1180024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wx 小程序不打开调试模式无法获取数据

问题开始 最近学习小程序,发布了一个体验版的小程序,发现正常扫码进入后接口数据是无法访问的。也就是原始数据,不过开启调试模式后,数据又一切正常,但是总不能让每个人都开启调试模式用吧,终于查阅资料后找到了解决问题的办法 …

viple入门(三)

(1)条件循环活动 条件循环活动中,必须给定条件,条件成立,则执行条件循环的后续程序。 条件不成立,则不执行后续程序。 从报错信息来看,程序提示:条件循环要和结束循环活动一起使用。…

抖音大型直播的画质优化实践

面临挑战 随着抖音内容生态的不断丰富,越来越多的大型赛事在抖音平台进行直播,世界杯/春晚/亚运会等各项赛事节目引来大量用户观看。卡塔尔世界杯期间,抖音提供的稳定高质直播画面为观众带来了完美的观赛体验,决赛的 PCU 高达 370…

电子牵:利用无代码开发优化电商平台、客服系统与CRM的连接

电子牵的无代码开发优势 在当前的电商环境中,优化运营并提高效率的需求日益增强。电子牵,这个专业的电子签名平台,提供了一种高效的解决方案。电子牵可以帮助用户迅速并有效地完成合同签署,进一步提升产品或平台的签署效率。更为…

【Hadoop】YARN容量调度器详解

🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁&am…

03-react基础知识-HOOK

一、useState 二、 useEffect 三、 useCallback 四、 useMemo 五、 useContext 含义:useContex用于在组件中获取上层组件通过 Context 提供的数据。它可以让你跨越组件树层级来访问共享的数据,避免了通过层层传递 props 的带来的问题。 1.实现数据的跨…

【Redis】Redis与SSM整合Redis注解式缓存Redis解决缓存问题

一&#xff0c;Redis与ssm整合 1.1 pom.xml配置 在pom.xml中配置相关的redis文件 redis文件&#xff1a; <redis.version>2.9.0</redis.version> <redis.spring.version>1.7.1.RELEASE</redis.spring.version><dependency><groupId>red…

【排版教程】使用Latex ACM 双栏会议模板如何添加跨栏的图片

0 前言 模板中默认的图片插入的写法是下图这样的单栏图片&#xff0c;但是一般我们自己绘制的系统整体结构框图都是比较长的&#xff08;横向长度&#xff09; 我们想插入一个类似于这样的长图片 但是模板中给的这个例子&#xff0c;是插入的一个pdf文件。在实际使用中&…

2023年【金属非金属矿山(地下矿山)安全管理人员】实操考试视频及金属非金属矿山(地下矿山)安全管理人员操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员实操考试视频考前必练&#xff01;安全生产模拟考试一点通每个月更新金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员操作证考试题目及答案…

传输线在阻抗匹配时串联端接电阻为什么要靠近发送端

在进行阻抗匹配的时候我们可以在电阻源端放置一个串联端接电阻&#xff0c;但是有时候受到空间的限制可能会把电阻摆的稍微远一点&#xff0c;那么这个时候大家可能会有疑问&#xff0c;电阻离发送端远一点或者电阻放置在接收端&#xff0c;那么电阻还能消除传输线的反射吗&…

uniApp封装请求

一、request封装 创建一个api文件夹&#xff0c;用于存放所有的API接口文件。在api文件夹中创建一个request.js文件&#xff0c;用于配置接口的路由信息、请求地址和请求方法等信息。示例代码如下&#xff1a; const BASE_URL http://example.com/api // 替换为你的接口基础U…

小白学爬虫:通过关键词搜索1688商品列表数据接口|1688商品列表数据接口|1688商品列表数据采集|1688API接口

通过关键词搜索1688商品列表数据接口可以使用1688开放平台提供的API接口实现。以下是使用关键词搜索商品列表数据的基本步骤&#xff1a; 1、注册并获取AppKey。 2、构造请求参数&#xff0c;包括搜索关键词、页码、每页条数等。 3、通过API接口链接&#xff0c;将请求参数发送…

第四章《全景图:机器学习路线图》笔记

4.1 通俗讲解机器学习是什么 4.1.1 究竟什么是机器学习 卡内基梅隆大学机器学习领域的著名学者汤姆米切尔曾经在 1997 年对机器学习做出过更为严谨和经典的定义: A program can be said to learn from experience E with respect to some class of tasks T and performance …

发票识别神器:自动化读取纸质发票信息,提高工作效率

当今数字化时代&#xff0c;纸质发票的处理和管理成为许多企业和个人面临的挑战。手动处理大量纸质发票不仅费时费力&#xff0c;还容易导致错误和遗漏。因此&#xff0c;自动识别纸质发票上的信息的软件成为一个备受关注的话题。 幸运的是&#xff0c;现在有一款先进的软件能…

[C/C++]数据结构 链表OJ题 : 链表中倒数第k个结点

描述 输入一个链表&#xff0c;输出该链表中倒数第k个结点。 方法一: 暴力求解 先遍历一遍整个链表获取链表长度len,则倒数第k个结点就是整数第len-k个结点 struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {struct ListNode* cur pListHead;int len …

RK3568驱动指南|第七篇 设备树-第61章 实例分析:pinctrl

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

宝马——使用人工智能制造和驾驶汽车

德国汽车制造商宝马(BMW)每年在全球制造和销售250万台汽车&#xff0c;其品牌包括宝马、MINI和劳斯莱斯。 宝马汽车以其卓越的性能和对新技术的应用而著名&#xff0c;它是道路上最精致的汽车之一&#xff0c;并且和其竞争对手戴姆勒(Daimler)一样&#xff0c;在将自动驾驶汽车…

最新、最全、最详细的 K8S 学习笔记总结

Kubernetes就是一个编排容器的工具&#xff0c;一个可以管理应用全生命周期的工具&#xff0c;从创建应用&#xff0c;应用的部署&#xff0c;应用提供服务&#xff0c;扩容缩容应用&#xff0c;应用更新&#xff0c;都非常的方便&#xff0c;而且可以做到故障自愈。 K8S的前景…

APP 备案公钥、签名 MD5、SHA-1、SHA-256获取方法

​ 公钥和 MD5 值可以通过苹果开发工具、Keytool、appuploder 等多种工具获取&#xff0c;最简单的就是以 appuploader为例。 1.下载 appuploader工具 &#xff0c;点击此处 下载 appuploader 工具。 ​2.下载完成后&#xff0c;解压压缩包&#xff0c;双击 appuploder 运行。…

CRM软件对B2B销售的作用有哪些?

​ CRM软件对B2B销售有用吗&#xff1f;面向B端企业的B2B销售模式&#xff0c;是一个比B2C模式错综复杂的业务形态。最初CRM软件就是为这种业a务模式设计的&#xff0c;十几年来碰撞出来的火花不一而足。 B2B&#xff08;也叫BtoB&#xff09;销售的特点几乎等同于难点&#x…