HarmonyOS鸿蒙Next中tabs组件的使用

HarmonyOS鸿蒙Next中tabs组件的使用 一、基本结构

页面组成有两个部分,分别是TabsContent和TabBar。TabContent是内容页,TabBar是导航页签栏。Tabs组件使用花括号包裹TabContent,其中TabContent显示相应的内容页。

二、常用属性

  1. barPosition:用于设置导航栏的位置,可以是开头(BarPosition.Start)或结尾(BarPosition.End)。默认情况下,导航栏位于顶部(BarPosition.Start)。当vertical属性为true时,barPosition设置为start,则导航栏位于左侧;设置为end,则导航栏位于右侧。
  2. vertical:用于设置导航栏的方向,可以是水平(false)或垂直(true)。
  3. scrollable:控制是否允许滑动。当导航栏的内容过多,无法在一屏内显示完时,可以通过设置scrollable为true来允许滑动。
  4. animationDuration:设置切换动画的时间,单位为毫秒。
  5. barMode:设置导航栏的模式,可以是固定(BarMode.Fixed)或滚动(BarMode.Scrollable)。当标签页过多时,可通过barMode属性设置导航栏的滑动。

三、使用方法

基本用法

在鸿蒙应用的页面中,可以通过以下方式使用Tabs组件:

@Entry
@Component
struct TabsDemo {
    build() {
        Tabs() {
            TabContent() {
                Text('首页内容')
            }.tabBar('首页')

            TabContent() {
                Text('推荐内容')
            }.tabBar('推荐')

            TabContent() {
                Text('发现内容')
            }.tabBar('发现')

            TabContent() {
                Text('我的内容')
            }.tabBar('我的')
        }
    }
}

设置导航栏位置

可以通过barPosition属性设置导航栏的位置。例如,将导航栏设置在底部:

Tabs({barPosition: BarPosition.End}) {
    // ...TabContent和tabBar的内容
}

滚动导航栏

当标签页过多,无法在一屏内显示完时,可以通过设置barMode为BarMode.Scrollable来实现滚动导航栏:

Tabs() {
    ForEach(this.titles, (item: string, index: number) => {
        TabContent() {
            Text(`${item}内容`)
        }.tabBar(`${item}`)
    }
}.barMode(BarMode.Scrollable)

其中,this.titles是一个包含所有标签页标题的字符串数组。

自定义导航栏

TabBar在底部时,一般会显示图形和文字,甚至有特殊的图标。可以通过自定义构建函数来实现自定义导航栏:

@Builder
myBuildBar(index: number, title: string, img?: ResourceStr, selectImg?: ResourceStr) {
    Column() {
        Image(index == this.selectedIndex ? selectImg : img).width(30).fillColor(Color.Orange)
        if (index === this.selectedIndex) {
            Text(title).fontColor(Color.Orange)
        } else {
            Text(title)
        }
    }
}

@Entry
@Component
struct CustomTabsDemo {
    @State selectedIndex: number = 0
    build() {
        Tabs({barPosition: BarPosition.End}) {
            TabContent() {
                Text('购物')
            }.tabBar(this.myBuildBar(0, '购物', $r('app.media.ic_tabbar_icon_2'), $r('app.media.ic_tabbar_icon_2_selected')))

            TabContent() {
                Text('我的')
            }.tabBar(this.myBuildBar(1, '我的', $r('app.media.ic_tabbar_icon_3'), $r('app.media.ic_tabbar_icon_3_selected')))
            // ...其他TabContent和tabBar的内容
        }.onChange((index: number) => {
            this.selectedIndex = index
        })
    }
}

在上面的代码中,myBuildBar函数用于构建自定义的TabBar,其中selectedIndex用于存储当前选中的TabBar索引。通过onChange事件监听TabBar的切换,并更新selectedIndex的值,从而实现高亮切换效果。

嵌套使用Tabs

Tabs内可以嵌套多个Tabs,以实现更复杂的布局。例如,可以在一个Tabs组件中嵌套另一个Tabs组件:

@Entry
@Component
struct NestedTabsDemo {
    title: string[] = ['直播', '推荐', '热门', '动画', '影视', '新征程', '军事', '体育', '八卦', '数码', '财经', '美食', '旅行']
    build() {
        Tabs({barPosition: BarPosition.End}) {
            TabContent() {
                Tabs() {
                    ForEach(this.title, (item: string, index: number) => {
                        TabContent() {
                            Text(`${item}内容`)
                        }.tabBar(`${item}`)
                    })
                }.barMode(BarMode.Scrollable)
            }.tabBar('首页')
            // ...其他TabContent和tabBar的内容
        }.scrollable(false).animationDuration(3000)
    }
}

在上面的代码中,外层的Tabs组件包含一个TabBar和一个内容区域,内容区域中嵌套了另一个Tabs组件。内层的Tabs组件用于显示多个标签页的内容,并通过barMode属性设置为滚动模式。

四、注意事项

  • TabContent组件不支持设置通用宽度属性,其宽度默认撑满Tabs父组件。
  • TabContent组件不支持设置通用高度属性,其高度由Tabs父组件高度与TabBar组件高度决定。
  • 在自定义TabBar时,需要注意高亮切换效果的实现,可以通过监听onChange事件或onTabBarClick事件来更新选中状态。

通过以上方法,可以在鸿蒙应用中灵活地使用Tabs组件来实现标签页切换功能。


更多关于HarmonyOS鸿蒙Next中tabs组件的使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,Tabs组件用于实现标签页的切换功能,通常与TabContent组件配合使用。Tabs组件支持水平或垂直布局,可以通过设置orientation属性来调整布局方向。默认情况下,Tabs为水平布局。

Tabs组件的主要属性包括:

  • index:当前选中的标签页索引。
  • controller:用于控制Tabs的控制器对象,可以通过编程方式切换标签页。
  • barPosition:设置标签栏的位置,支持顶部、底部、左侧和右侧。
  • barWidthbarHeight:设置标签栏的宽度和高度。

TabContent组件用于定义每个标签页的内容。每个TabContent需要与Tabs中的标签项一一对应。

示例代码:

@Entry
@Component
struct TabsExample {
  private controller: TabsController = new TabsController()

  build() {
    Column() {
      Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
        TabContent() {
          Text('Tab 1 Content').fontSize(20)
        }.tabBar('Tab 1')

        TabContent() {
          Text('Tab 2 Content').fontSize(20)
        }.tabBar('Tab 2')
      }
      .barWidth(150)
      .barHeight(50)
    }
  }
}

在示例中,Tabs组件创建了两个标签页,标签栏位于左侧,宽度为150,高度为50。通过TabsController可以控制标签页的切换。

Tabs组件还支持事件监听,如onChange事件,当用户切换标签页时触发。可以通过监听该事件来执行相应的逻辑处理。

总结:Tabs组件是鸿蒙Next中用于实现标签页切换的核心组件,支持多种布局和自定义配置,适用于需要多标签展示的场景。

更多关于HarmonyOS鸿蒙Next中tabs组件的使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,tabs组件用于创建选项卡式界面,允许用户在不同内容之间切换。通过TabsTab子组件实现,支持设置标签、图标、内容等。常用属性包括index(当前选中索引)、vertical(是否垂直排列)、barPosition(标签栏位置)。事件如onChange用于监听切换操作。开发者可灵活定制样式和交互,提升用户体验。

回到顶部