当前位置:   article > 正文

HarmonyOS 常用容器组件3-Tabs_harmoneyos中tabs 凸起tab

harmoneyos中tabs 凸起tab

一、Tabs

1、概述

我们经常使用时,会出现试图切换的场景,比如底部有多个菜单,“首页”、 “我的”等。

两个内容容器的切换:

        ArkUI开发框架提供了一种页签容器组件Tabs,开发者通过Tabs组件可以很容易的实现内容视图的切换。页签容器Tabs的形式多种多样,不同的页面设计页签不一样,可以把页签设置在底部、顶部或者侧边

二、Tabs组件的使用

Tabs组件仅可包含子组件TabContent,每一个页签对应一个内容视图即TabContent组件。

示例代码:

  1. @Entry
  2. @Component
  3. struct ControlTabs {
  4. // 设置Tabs控制器
  5. private controller: TabsController = new TabsController()
  6. build() {
  7. Row() {
  8. Column() {
  9. Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
  10. TabContent(){
  11. Column().width('100%').height('100%').backgroundColor(Color.Red)
  12. }
  13. .tabBar("Red")
  14. TabContent(){
  15. Column().width('100%').height('100%').backgroundColor(Color.Green)
  16. }
  17. .tabBar("Green")
  18. }
  19. .barWidth('100%') // 设置TabBar宽度
  20. .barHeight(60) // 设置TabBar高度
  21. .width('100%') // 设置Tabs组件宽度
  22. .height('100%') // 设置Tabs组件高度
  23. .backgroundColor(0xF5F5F5) // 设置Tabs组件背景颜色
  24. }
  25. .width('100%')
  26. }
  27. .height('100%')
  28. }
  29. }

效果图:

接口:

Tabs(value?: {barPosition?: BarPosition, index?: number, controller?: ​TabsController​})

参数:

参数名

参数类型

必填

参数描述

barPosition

BarPosition

设置Tabs的页签位置,默认值:BarPosition.Start(顶部)

index

number

设置初始页签索引。

默认值:0

说明:

设置为小于0的值时按默认值显示。

可选值为[0, TabContent子节点数量-1]。

设置不同值时,默认生效切换动效,可以设置animationDuration为0关闭动画。

controller

TabsController

设置Tabs的控制器

一搬是: new TabsController();

BarPosition枚举说明:

名称

描述

Start

Vertical属性方法设置为true时,页签位于容器的左侧;Vertical属性方法设置为false(默认)时,页签位于容器顶部。

End

Vertical属性方法设置为true时,页签位于容器右侧;Vertical属性方法设置为false(默认)时,页签位于容器底部。

Tabs的一些属性:

名称

参数类型

描述

Vertical

boolean

设置为false时为横向Tabs

设置为true时为纵向Tabs。

默认值:false

scrollable

boolean

设置为true时,可以通过滑动页面进行页面的切换。

设置为false时,不可滑动来切换页面。

默认值:true

barMode

BarMode

TabBar布局模式,具体描述见TabBar布局模式。

默认值:BarMode.Fixed

barwidth

number | Length8+

TabBar的宽度值。

说明:

设置为小于0或大于Tabs宽度值时,按默认值显示。

barHeight

number | Length8+

TabBar的高度值。

说明:

设置为小于0或大于Tabs宽度值时,按默认值显示。

animationDuration

number

TabContent滑动动画时长。不设置时,点击切换页签无动画,滑动切换有动画;设置时,点击切换和滑动切换都有动画。

默认值:300

说明:

设置为小于0或百分比时,按默认值显示。

设置TabBar布局模式:

        Tabs的布局模式默认是Fixed的,所以Tabs的页签是不可滑动的。当页签比较多的时候,可能会导致页签显示不全,将布局模式设置为Scrollable的话,可以实现页签的滚动。

        Tabs的布局模式有Fixed(默认)和Scrollable两种:

  • BarMode.Fixed:所有TabBar平均分配barWidth宽度(纵向时平均分配barHeight高度),页签不可滚动,效果图如下:

  • BarMode.Scrollable:每一个TabBar均使用实际布局宽度,超过总长度(横向Tabs的barWidth,纵向Tabs的barHeight)后可滑动。

自定义TabBar样式

TabBar的默认显示效果如下所示:

        往往开发过程中,UX给我们的设计效果可能并不是这样的,比如下面的这种底部页签效果:

        TabContent的tabBar属性除了支持string类型,还支持使用@Builder装饰器修饰的函数。您可以使用@Builder装饰器,构造一个生成自定义TabBar样式的函数,实现上面的底部页签效果,示例代码如下:

  1. @Entry
  2. @Component
  3. struct TabsExample {
  4. @State currentIndex: number = 0;
  5. private tabsController: TabsController = new TabsController();
  6. @Builder TabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
  7. Column() {
  8. Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
  9. .size({ width: 25, height: 25 })
  10. Text(title)
  11. .fontColor(this.currentIndex === targetIndex ? '#1698CE' : '#6B6B6B')
  12. }
  13. .width('100%')
  14. .height(50)
  15. .justifyContent(FlexAlign.Center)
  16. .onClick(() => {
  17. this.currentIndex = targetIndex;
  18. this.tabsController.changeIndex(this.currentIndex);
  19. })
  20. }
  21. build() {
  22. Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) {
  23. TabContent() {
  24. Column().width('100%').height('100%').backgroundColor('#00CB87')
  25. }
  26. .tabBar(this.TabBuilder('首页', 0, $r('app.media.home_selected'), $r('app.media.home_normal')))
  27. TabContent() {
  28. Column().width('100%').height('100%').backgroundColor('#007DFF')
  29. }
  30. .tabBar(this.TabBuilder('我的', 1, $r('app.media.mine_selected'), $r('app.media.mine_normal')))
  31. }
  32. .barWidth('100%')
  33. .barHeight(50)
  34. .onChange((index: number) => {
  35. this.currentIndex = index;
  36. })
  37. }
  38. }

        代码中将barPosition的值设置为BarPosition.End,使页签显示在底部。使用@Builder修饰TabBuilder函数,生成由Image和Text组成的页签。同时也给Tabs组件设置了TabsController控制器,当点击某个页签时,调用changeIndex方法进行页签内容切换。

        最后还需要给Tabs添加onChange事件,Tab页签切换后触发该事件,这样当我们左右滑动内容视图的时候,页签样式也会跟着改变。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/288957
推荐阅读
相关标签
  

闽ICP备14008679号