首页 > 其他分享 >容器组件Tabs如何自定义 tabBar-高亮切换

容器组件Tabs如何自定义 tabBar-高亮切换

时间:2024-05-28 20:58:02浏览次数:37  
标签:index 自定义 Tabs number tabBarBuilder 切换 tabBar selectedIndex

1.TabBar 如果放在底部的话,一般会显示图形文字,甚至有特殊的图标,如果要实现此类效果,就需要 自定义tabBar

Tabs() {
    TabContent() {
        // 内容略
    }
    .tabBar(this.tabBarBuilder())
  }

@Builder
tabBarBuilder() {
  // 自定义的Tabbar结构
}

2.自定义TabBar 之后,高亮的切换效果就没有了,需要自行实现,首先咱们得知道什么时候进行了切换

onChange(event: (index: number) => void)

Tab页签切换后触发的事件。

- index:当前显示的index索引,索引从0开始计算。

滑动切换、点击切换 均会触发

onTabBarClick(event: (index: number) => void)10+

Tab页签点击后触发的事件。

- index:被点击的index索引,索引从0开始计算。

3.结合事件,来实现高亮的切换效果

  1. 用状态变量保存,onChange,ontabBarClick中获取到的索引值
  2. 给每个 tabBar起个标记,0,1,2.。。
  3. 在tabBar内部比较 标记==this.index?高亮:不高亮
    @Entry
    @Component
    struct TabsDemo03 {
      @State selectedIndex: number = 0
    
      build() {
        Column() {
          Text(this.selectedIndex + '')
          Tabs() {
            TabContent() {
              Text('首页')
            }
            .tabBar(this.tabBarBuilder($r('app.media.ic_tabbar_icon_2'), '首页', 0, $r('app.media.ic_tabbar_icon_2_selected')))
    
    
            TabContent() {
              Text('搜索')
            }
            .tabBar(this.tabBarBuilder($r('app.media.ic_tabbar_icon_3'), '探索', 1, $r('app.media.ic_tabbar_icon_3_selected')))
          }
          .barPosition(BarPosition.End)
          .scrollable(true)
          .layoutWeight(1)
          .onChange((index: number) => {
            this.selectedIndex = index
          })
    
        }
      }
    
      @Builder
      tabBarBuilder(img: ResourceStr, text: string, index: number, selectedImg: ResourceStr) {
    
        Column() {
          Image(this.selectedIndex == index ? selectedImg : img)
            .width(30)
          Text(text)
            .fontColor(this.selectedIndex == index ? Color.Red : Color.Black)
        }
      }
    }

标签:index,自定义,Tabs,number,tabBarBuilder,切换,tabBar,selectedIndex
From: https://blog.csdn.net/ntyupup/article/details/139276278

相关文章

  • 浅析SpringBoot中的AOP以及自定义注解类
    概念说明SpringBoot中的AOP(面向切面编程)是一种编程范式,它允许开发者定义跨多个对象的横切关注点。横切关注点是与业务逻辑无关的功能,如日志记录、安全检查、事务管理等。AOP的主要目的是将横切关注点与业务逻辑分离,提高代码的模块化和可维护性。AOP的核心概念包括:切面(As......
  • 自定义一个简单的日历
    前言  此博客提供一个个人实现的自定义View,日历的内容全部是通过绘制实现的。 虽然是使用flutter实现自定义日历View的,但是关键核心思想是一致的,这边放到博客中提供给各位参考。后续有时间会继续提供Android版本的自定义日历.效果图代码最关键的是绘制日历内容的4个函数......
  • CSS 之 自定义属性(变量)
    一、简介​CSS的自定义属性,又称为CSS变量或级联变量,用于定义一个带有值的、可重复使用的CSS属性(变量)。其包含的值可以在其作用域内的任意属性上重复使用,在使用时需要借助var()函数获取自定义属性的值。当自定义属性的值发生变化时,所有使用该自定义属性的CSS属性都会随之变......
  • Kettle 自定义循环 & 更新变量值
    布局图 Setvariables JavaScript(循环逻辑)varmin=newNumber(parent_job.getVariable("MIN"));varmax=newNumber(parent_job.getVariable("MAX"));if(max>=min){true;}else{false;}JavaScript(更新循环条件)varmax=newNum......
  • [C][自定义类型][二][位段][枚举][联合体]详细讲解
    目录1.位段1.什么是位段?2.位段的内存分配3.位段的跨平台问题4.位段的应用2.枚举1.什么是枚举?2.枚举类型的定义3.枚举的优点4.枚举的使用3.联合体(共用体)1.联合类型的定义1.位段1.什么是位段?位段的声明和结构是类似的,但有两个不同位段的成员必须是int、unsi......
  • 自定义CSS属性(@property)解决自定义CSS变量无法实现过渡效果的问题
    且看下面的代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>demot</t......
  • 【ROS】-- 自定义回调队列
    在ros中,我们常用的回调处理是ros::spin()或者ros::spinOnce(),但是,这两个是阻塞式单线程处理的,即当不做其他处理的情况下,某一个回调函数堵塞,其他topic或者service的回调函数就无法进入。使用ros多线程的方式可以解决该问题,但引入多线程会导致线程安全的问题。针对某些场景,......
  • 个人原创自定义计算公式组件可继续扩展
    <template><div><el-row><el-col:span="24"><el-container><el-main><el-card><div><el-button......
  • 小程序自定义swiper的指示点样式及颜色
    1图居中、圆边角、指示点颜色更改、指示点样式更改下图是样式不好看的组件要修改成这样::  wxml:<swiperclass="bd"indicator-dots="{{true}}"indicator-active-color="#ff8f00"autoplay="{{true}}"interval="5000"duration="500">......
  • ocelot自定义认证token
    中间件publicclassCustomOcelotMiddleware:Ocelot.Middleware.OcelotMiddleware{privatereadonlyRequestDelegate_next;publicIConfiguration_configuration;privatereadonlyIAuth_authUtil;privatereadonlySysLogApp_logApp;......