• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# TabContent
2
3仅在Tabs中使用,对应一个切换页签的内容视图。
4
5>  **说明:**
6>
7>  该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9
10## 子组件
11
12支持单个子组件。
13
14>  **说明:**
15>
16>  可内置系统组件和自定义组件,支持渲染控制类型([if/else](../../quick-start/arkts-rendering-control-ifelse.md)、[ForEach](../../quick-start/arkts-rendering-control-foreach.md)和[LazyForEach](../../quick-start/arkts-rendering-control-lazyforeach.md))。
17
18
19## 接口
20
21TabContent()
22
23
24## 属性
25
26除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性:
27
28| 名称 | 参数类型 | 描述 |
29| -------- | -------- | -------- |
30| tabBar | string&nbsp;\|&nbsp;Resource&nbsp;\|&nbsp;{<br/>icon?:&nbsp;string&nbsp;\|&nbsp;Resource,<br/>text?:&nbsp;string&nbsp;\|&nbsp;Resource<br/>}<br/>\|&nbsp;[CustomBuilder](ts-types.md)<sup>8+</sup> | 设置TabBar上显示内容。<br/>CustomBuilder:&nbsp;构造器,内部可以传入组件(API8版本以上适用)。<br/>>&nbsp;&nbsp;**说明:**<br/>>&nbsp;如果icon采用svg格式图源,则要求svg图源删除其自有宽高属性值。如采用带有自有宽高属性的svg图源,icon大小则是svg本身内置的宽高属性值大小。<br>设置的内容超出tabbar页签时进行裁切。 |
31| tabBar<sup>9+</sup> | [SubTabBarStyle](#subtabbarstyle) \| [BottomTabBarStyle](#bottomtabbarstyle) | 设置TabBar上显示内容。<br/>SubTabBarStyle:&nbsp;子页签样式,参数为文字。<br/>BottomTabBarStyle:&nbsp;底部页签和侧边页签样式,参数为文字和图片。<br/>**说明:** <br/>底部样式没有下划线效果。<br/>icon异常时显示灰色图块。 |
32
33>  **说明:**
34>
35>  - TabContent组件不支持设置通用宽度属性,其宽度默认撑满Tabs父组件。
36>  - TabContent组件不支持设置通用高度属性,其高度由Tabs父组件高度与TabBar组件高度决定。
37>  - vertical属性为false值,交换上述2个限制。
38>  - TabContent组件不支持内容过长时页面的滑动,如需页面滑动,可嵌套List使用。
39
40## SubTabBarStyle<sup>9+</sup>
41
42子页签样式。
43
44### constructor<sup>9+</sup>
45
46constructor(content: string | Resource)
47
48SubTabBarStyle的构造函数。
49
50**参数:**
51
52| 参数名 | 参数类型         | 必填 | 参数描述 |
53| -------- | -------- | -------- | -------- |
54| content | string \| [Resource](ts-types.md#resource) | 是 | 页签内的文字内容。 |
55
56## BottomTabBarStyle<sup>9+</sup>
57
58底部页签和侧边页签样式。
59
60### constructor<sup>9+</sup>
61
62constructor(icon: string | Resource, text: string | Resource)
63
64BottomTabBarStyle的构造函数。
65
66**参数:**
67
68| 参数名 | 参数类型         | 必填 | 参数描述 |
69| -------- | -------- | -------- | -------- |
70| icon | string \| [Resource](ts-types.md#resource) | 是 | 页签内的图片内容。 |
71| text | string \| [Resource](ts-types.md#resource) | 是 | 页签内的文字内容。 |
72
73## 示例
74
75示例1:
76
77```ts
78// xxx.ets
79@Entry
80@Component
81struct TabContentExample {
82  @State fontColor: string = '#182431'
83  @State selectedFontColor: string = '#007DFF'
84  @State currentIndex: number = 0
85  private controller: TabsController = new TabsController()
86
87  @Builder TabBuilder(index: number) {
88    Column() {
89      Image(this.currentIndex === index ? '/common/public_icon_on.svg' : '/common/public_icon_off.svg')
90        .width(24)
91        .height(24)
92        .margin({ bottom: 4 })
93        .objectFit(ImageFit.Contain)
94      Text(`Tab${index + 1}`)
95        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
96        .fontSize(10)
97        .fontWeight(500)
98        .lineHeight(14)
99    }.width('100%')
100  }
101
102  build() {
103    Column() {
104      Tabs({ barPosition: BarPosition.End, controller: this.controller }) {
105        TabContent() {
106          Column() {
107            Text('Tab1')
108              .fontSize(36)
109              .fontColor('#182431')
110              .fontWeight(500)
111              .opacity(0.4)
112              .margin({ top: 30, bottom: 56.5 })
113            Divider()
114              .strokeWidth(0.5)
115              .color('#182431')
116              .opacity(0.05)
117          }.width('100%')
118        }.tabBar(this.TabBuilder(0))
119
120        TabContent() {
121          Column() {
122            Text('Tab2')
123              .fontSize(36)
124              .fontColor('#182431')
125              .fontWeight(500)
126              .opacity(0.4)
127              .margin({ top: 30, bottom: 56.5 })
128            Divider()
129              .strokeWidth(0.5)
130              .color('#182431')
131              .opacity(0.05)
132          }.width('100%')
133        }.tabBar(this.TabBuilder(1))
134
135        TabContent() {
136          Column() {
137            Text('Tab3')
138              .fontSize(36)
139              .fontColor('#182431')
140              .fontWeight(500)
141              .opacity(0.4)
142              .margin({ top: 30, bottom: 56.5 })
143            Divider()
144              .strokeWidth(0.5)
145              .color('#182431')
146              .opacity(0.05)
147          }.width('100%')
148        }.tabBar(this.TabBuilder(2))
149
150        TabContent() {
151          Column() {
152            Text('Tab4')
153              .fontSize(36)
154              .fontColor('#182431')
155              .fontWeight(500)
156              .opacity(0.4)
157              .margin({ top: 30, bottom: 56.5 })
158            Divider()
159              .strokeWidth(0.5)
160              .color('#182431')
161              .opacity(0.05)
162          }.width('100%')
163        }.tabBar(this.TabBuilder(3))
164      }
165      .vertical(false)
166      .barHeight(56)
167      .onChange((index: number) => {
168        this.currentIndex = index
169      })
170      .width(360)
171      .height(190)
172      .backgroundColor('#F1F3F5')
173      .margin({ top: 38 })
174    }.width('100%')
175  }
176}
177```
178
179![tabContent](figures/tabContent1.gif)
180
181示例2:
182
183```ts
184// xxx.ets
185@Entry
186@Component
187struct TabContentExample {
188  @State fontColor: string = '#182431'
189  @State selectedFontColor: string = '#007DFF'
190  @State currentIndex: number = 0
191  private controller: TabsController = new TabsController()
192
193  @Builder TabBuilder(index: number) {
194    Column() {
195      Image(this.currentIndex === index ? '/common/public_icon_on.svg' : '/common/public_icon_off.svg')
196        .width(24)
197        .height(24)
198        .margin({ bottom: 4 })
199        .objectFit(ImageFit.Contain)
200      Text('Tab')
201        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
202        .fontSize(10)
203        .fontWeight(500)
204        .lineHeight(14)
205    }.width('100%').height('100%').justifyContent(FlexAlign.Center)
206  }
207
208  build() {
209    Column() {
210      Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
211        TabContent()
212          .tabBar(this.TabBuilder(0))
213        TabContent()
214          .tabBar(this.TabBuilder(1))
215        TabContent()
216          .tabBar(this.TabBuilder(2))
217        TabContent()
218          .tabBar(this.TabBuilder(3))
219      }
220      .vertical(true)
221      .barWidth(96)
222      .barHeight(414)
223      .onChange((index: number) => {
224        this.currentIndex = index
225      })
226      .width(96)
227      .height(414)
228      .backgroundColor('#F1F3F5')
229      .margin({ top: 52 })
230    }.width('100%')
231  }
232}
233```
234
235![tabContent](figures/tabContent2.gif)
236
237示例3:
238
239```ts
240// xxx.ets
241@Entry
242@Component
243struct TabBarStyleExample {
244  build() {
245    Column({ space: 5 }) {
246      Text("子页签样式")
247      Column() {
248        Tabs({ barPosition: BarPosition.Start }) {
249          TabContent() {
250            Column().width('100%').height('100%').backgroundColor(Color.Pink)
251          }.tabBar(new SubTabBarStyle('Pink'))
252
253          TabContent() {
254            Column().width('100%').height('100%').backgroundColor(Color.Yellow)
255          }.tabBar(new SubTabBarStyle('Yellow'))
256
257          TabContent() {
258            Column().width('100%').height('100%').backgroundColor(Color.Blue)
259          }.tabBar(new SubTabBarStyle('Blue'))
260
261          TabContent() {
262            Column().width('100%').height('100%').backgroundColor(Color.Green)
263          }.tabBar(new SubTabBarStyle('Green'))
264        }
265        .vertical(false)
266        .scrollable(true)
267        .barMode(BarMode.Fixed)
268        .onChange((index: number) => {
269          console.info(index.toString())
270        })
271        .width('100%')
272        .backgroundColor(0xF1F3F5)
273      }.width('100%').height(200)
274      Text("底部页签样式")
275      Column() {
276        Tabs({ barPosition: BarPosition.End }) {
277          TabContent() {
278            Column().width('100%').height('100%').backgroundColor(Color.Pink)
279          }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'pink'))
280
281          TabContent() {
282            Column().width('100%').height('100%').backgroundColor(Color.Yellow)
283          }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Yellow'))
284
285          TabContent() {
286            Column().width('100%').height('100%').backgroundColor(Color.Blue)
287          }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Blue'))
288
289          TabContent() {
290            Column().width('100%').height('100%').backgroundColor(Color.Green)
291          }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Green'))
292        }
293        .vertical(false)
294        .scrollable(true)
295        .barMode(BarMode.Fixed)
296        .onChange((index: number) => {
297          console.info(index.toString())
298        })
299        .width('100%')
300        .backgroundColor(0xF1F3F5)
301      }.width('100%').height(200)
302      Text("侧边页签样式")
303      Column() {
304        Tabs({ barPosition: BarPosition.Start }) {
305          TabContent() {
306            Column().width('100%').height('100%').backgroundColor(Color.Pink)
307          }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'pink'))
308
309          TabContent() {
310            Column().width('100%').height('100%').backgroundColor(Color.Yellow)
311          }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Yellow'))
312
313          TabContent() {
314            Column().width('100%').height('100%').backgroundColor(Color.Blue)
315          }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Blue'))
316
317          TabContent() {
318            Column().width('100%').height('100%').backgroundColor(Color.Green)
319          }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Green'))
320        }
321        .vertical(true).scrollable(true).barMode(BarMode.Fixed)
322        .onChange((index: number) => {
323          console.info(index.toString())
324        })
325        .width('100%')
326        .backgroundColor(0xF1F3F5)
327      }.width('100%').height(400)
328    }
329  }
330}
331```
332
333![tabbarStyle](figures/TabBarStyle.jpeg)
334