ts-container-tabcontent.md 5.5 KB
Newer Older
Z
zengyawen 已提交
1 2
# TabContent

Z
zengyawen 已提交
3 4
仅在Tabs中使用,对应一个切换页签的内容视图。

T
firstt  
tianyu 已提交
5 6 7
>  **说明:**
>
>  该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
8

Z
zengyawen 已提交
9 10

## 子组件
Z
zengyawen 已提交
11 12 13 14

支持单个子组件。


Z
zengyawen 已提交
15 16 17
## 接口

TabContent()
Z
zengyawen 已提交
18

Z
zengyawen 已提交
19 20

## 属性
Z
zengyawen 已提交
21

T
firstt  
tianyu 已提交
22
除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性:
Z
zengyawen 已提交
23

T
firstt  
tianyu 已提交
24 25
| 名称 | 参数类型 | 描述 |
| -------- | -------- | -------- |
H
HelloCrease 已提交
26
| 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本身内置的宽高属性值大小。 |
Z
zengyawen 已提交
27

H
geshi  
HelloCrease 已提交
28
>  **说明:**
Z
zengyawen 已提交
29 30
> - TabContent组件不支持设置通用宽度属性,其宽度默认撑满Tabs父组件。
> - TabContent组件不支持设置通用高度属性,其高度由Tabs父组件高度与TabBar组件高度决定。
T
firstt  
tianyu 已提交
31
> - TabContent组件不支持[触摸热区设置](ts-universal-attributes-touch-target.md)。
Z
zengyawen 已提交
32 33 34


## 示例
Z
zengyawen 已提交
35

L
luoying_ace_admin 已提交
36 37
示例1:

H
geshi  
HelloCrease 已提交
38 39
```ts
// xxx.ets
Z
zengyawen 已提交
40 41
@Entry
@Component
42
struct TabContentExample {
L
luoying_ace_admin 已提交
43 44
  @State fontColor: string = '#182431'
  @State selectedFontColor: string = '#007DFF'
Z
zengyawen 已提交
45 46
  @State currentIndex: number = 0
  private controller: TabsController = new TabsController()
47

Z
zengyawen 已提交
48
  @Builder TabBuilder(index: number) {
Z
zengyawen 已提交
49
    Column() {
L
luoying_ace_admin 已提交
50
      Image(this.currentIndex === index ? '/common/public_icon_on.svg' : '/common/public_icon_off.svg')
51 52
        .width(24)
        .height(24)
L
luoying_ace_admin 已提交
53
        .margin({ bottom: 4 })
Z
zengyawen 已提交
54
        .objectFit(ImageFit.Contain)
L
luoying_ace_admin 已提交
55
      Text(`Tab${index + 1}`)
Z
zengyawen 已提交
56
        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
Z
zengyawen 已提交
57
        .fontSize(10)
L
luoying_ace_admin 已提交
58 59
        .fontWeight(500)
        .lineHeight(14)
60
    }.width('100%')
Z
zengyawen 已提交
61 62 63 64
  }

  build() {
    Column() {
Z
zengyawen 已提交
65
      Tabs({ barPosition: BarPosition.End, controller: this.controller }) {
Z
zengyawen 已提交
66
        TabContent() {
67
          Column() {
L
luoying_ace_admin 已提交
68 69 70 71 72 73 74 75 76 77
            Text('Tab1')
              .fontSize(36)
              .fontColor('#182431')
              .fontWeight(500)
              .opacity(0.4)
              .margin({ top: 30, bottom: 56.5 })
            Divider()
              .strokeWidth(0.5)
              .color('#182431')
              .opacity(0.05)
78
          }.width('100%')
Z
zengyawen 已提交
79
        }.tabBar(this.TabBuilder(0))
Z
zengyawen 已提交
80 81

        TabContent() {
82
          Column() {
L
luoying_ace_admin 已提交
83 84 85 86 87 88 89 90 91 92
            Text('Tab2')
              .fontSize(36)
              .fontColor('#182431')
              .fontWeight(500)
              .opacity(0.4)
              .margin({ top: 30, bottom: 56.5 })
            Divider()
              .strokeWidth(0.5)
              .color('#182431')
              .opacity(0.05)
93
          }.width('100%')
Z
zengyawen 已提交
94
        }.tabBar(this.TabBuilder(1))
Z
zengyawen 已提交
95 96

        TabContent() {
97
          Column() {
L
luoying_ace_admin 已提交
98 99 100 101 102 103 104 105 106 107
            Text('Tab3')
              .fontSize(36)
              .fontColor('#182431')
              .fontWeight(500)
              .opacity(0.4)
              .margin({ top: 30, bottom: 56.5 })
            Divider()
              .strokeWidth(0.5)
              .color('#182431')
              .opacity(0.05)
108
          }.width('100%')
L
luoying_ace_admin 已提交
109
        }.tabBar(this.TabBuilder(2))
Z
zengyawen 已提交
110 111

        TabContent() {
112
          Column() {
L
luoying_ace_admin 已提交
113 114 115 116 117 118 119 120 121 122
            Text('Tab4')
              .fontSize(36)
              .fontColor('#182431')
              .fontWeight(500)
              .opacity(0.4)
              .margin({ top: 30, bottom: 56.5 })
            Divider()
              .strokeWidth(0.5)
              .color('#182431')
              .opacity(0.05)
123
          }.width('100%')
Z
zengyawen 已提交
124
        }.tabBar(this.TabBuilder(3))
Z
zengyawen 已提交
125 126
      }
      .vertical(false)
127
      .barHeight(56)
Z
zengyawen 已提交
128 129 130
      .onChange((index: number) => {
        this.currentIndex = index
      })
L
luoying_ace_admin 已提交
131 132 133 134 135
      .width(360)
      .height(190)
      .backgroundColor('#F1F3F5')
      .margin({ top: 38 })
    }.width('100%')
Z
zengyawen 已提交
136 137 138 139
  }
}
```

L
luoying_ace_admin 已提交
140
![tabContent](figures/tabContent1.gif)
L
luoying_ace_admin 已提交
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194

示例2:

```ts
// xxx.ets
@Entry
@Component
struct TabContentExample {
  @State fontColor: string = '#182431'
  @State selectedFontColor: string = '#007DFF'
  @State currentIndex: number = 0
  private controller: TabsController = new TabsController()

  @Builder TabBuilder(index: number) {
    Column() {
      Image(this.currentIndex === index ? '/common/public_icon_on.svg' : '/common/public_icon_off.svg')
        .width(24)
        .height(24)
        .margin({ bottom: 4 })
        .objectFit(ImageFit.Contain)
      Text('Tab')
        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
        .fontSize(10)
        .fontWeight(500)
        .lineHeight(14)
    }.width('100%').height('100%').justifyContent(FlexAlign.Center)
  }

  build() {
    Column() {
      Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
        TabContent()
          .tabBar(this.TabBuilder(0))
        TabContent()
          .tabBar(this.TabBuilder(1))
        TabContent()
          .tabBar(this.TabBuilder(2))
        TabContent()
          .tabBar(this.TabBuilder(3))
      }
      .vertical(true)
      .barWidth(96)
      .barHeight(414)
      .onChange((index: number) => {
        this.currentIndex = index
      })
      .width(96)
      .height(414)
      .backgroundColor('#F1F3F5')
      .margin({ top: 52 })
    }.width('100%')
  }
}
```
L
luoying_ace_admin 已提交
195 196

![tabContent](figures/tabContent2.gif)