• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Tabs
2
3一种可以通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。
4
5>  **说明:**
6>
7>  该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9
10## 子组件
11
12包含子组件[TabContent](ts-container-tabcontent.md)。
13
14
15## 接口说明
16
17Tabs(value?: {barPosition?: BarPosition, index?: number, controller?: [TabsController](#tabscontroller)})
18
19**参数:**
20
21| 参数名         | 参数类型                              | 必填   | 默认值               | 参数描述               |
22| ----------- | --------------------------------- | ---- | ----------------- | ------------------ |
23| barPosition | BarPosition                       | 否    | BarPosition.Start | 指定页签位置来创建Tabs容器组件。 |
24| index       | number                            | 否    | 0                 | 指定初次初始页签索引。        |
25| controller  | [TabsController](#tabscontroller) | 否    | -                 | 设置Tabs控制器。         |
26
27## BarPosition枚举说明
28
29| 名称    | 描述                                       |
30| ----- | ---------------------------------------- |
31| Start | vertical属性方法设置为true时,页签位于容器左侧;vertical属性方法设置为false时,页签位于容器顶部。 |
32| End   | vertical属性方法设置为true时,页签位于容器右侧;vertical属性方法设置为false时,页签位于容器底部。 |
33
34## 属性
35
36不支持触摸热区设置。
37
38| 名称                | 参数类型    | 默认值                         | 描述                              |
39| ----------------- | ------- | --------------------------- | ------------------------------- |
40| vertical          | boolean | false          | 设置为false是为横向Tabs,设置为true时为纵向Tabs。              |
41| scrollable        | boolean | true   | 设置为true时可以通过滑动页面进行页面切换,为false时不可滑动切换页面。       |
42| barMode           | BarMode | BarMode.Fixed                | TabBar布局模式,具体描述见BarMode枚举说明。                     |
43| barWidth          | [Length](ts-types.md#length) | -    | TabBar的宽度值。     |
44| barHeight        | [Length](ts-types.md#length) | -    | TabBar的高度值。     |
45| animationDuration | number  | 200                         | TabContent滑动动画时长。               |
46
47## BarMode枚举说明
48
49| 名称         | 描述                              |
50| ---------- | ------------------------------- |
51| Scrollable | TabBar使用实际布局宽度, 超过总长度后可滑动。 |
52| Fixed      | 所有TabBar平均分配宽度。                 |
53
54## 事件
55
56| 名称                                                         | 功能描述                                                 |
57| ------------------------------------------------------------ | -------------------------------------------------------- |
58| onChange(event:&nbsp;(index:&nbsp;number)&nbsp;=&gt;&nbsp;void) | Tab页签切换后触发的事件。<br/>- index: tab标签的索引值。 |
59
60## TabsController
61
62Tabs组件的控制器,用于控制Tabs组件进行页签切换。
63
64### 导入对象
65
66```
67controller: TabsController = new TabsController()
68```
69
70### changeIndex
71
72changeIndex(value: number): void
73
74控制Tabs切换到指定页签。
75
76**参数:**
77
78| 参数名 | 参数类型 | 必填 | 默认值 | 参数描述                              |
79| ------ | -------- | ---- | ------ | ------------------------------------- |
80| value  | number   | 是   | -      | 页签在Tabs里的索引值,索引值从0开始。 |
81
82## 示例
83
84```ts
85// xxx.ets
86@Entry
87@Component
88struct TabsExample {
89  private controller: TabsController = new TabsController()
90
91  build() {
92    Column() {
93      Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
94        TabContent() {
95          Column().width('100%').height('100%').backgroundColor(Color.Pink)
96        }.tabBar('pink')
97
98        TabContent() {
99          Column().width('100%').height('100%').backgroundColor(Color.Yellow)
100        }.tabBar('yellow')
101
102        TabContent() {
103          Column().width('100%').height('100%').backgroundColor(Color.Blue)
104        }.tabBar('blue')
105
106        TabContent() {
107          Column().width('100%').height('100%').backgroundColor(Color.Green)
108        }.tabBar('green')
109      }
110      .vertical(true).scrollable(true).barMode(BarMode.Fixed)
111      .barWidth(70).barHeight(150).animationDuration(400)
112      .onChange((index: number) => {
113        console.info(index.toString())
114      })
115      .width('90%').backgroundColor(0xF5F5F5)
116    }.width('100%').height(150).margin({ top: 5 })
117  }
118}
119```
120
121![zh-cn_image_0000001174264360](figures/zh-cn_image_0000001174264360.gif)
122