切换页签的内容视图

2024-01-22 17:59 更新

仅在Tabs中使用,对应一个切换页签的内容视图。

说明

该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

支持单个子组件。

说明

可内置系统组件和自定义组件,支持渲染控制类型(if/elseForEachLazyForEach)。

接口

TabContent()

属性

除支持通用属性外,还支持以下属性:

名称

参数类型

描述

tabBar

string | Resource | {

icon?: string | Resource,

text?: string |Resource

}

CustomBuilder8+

设置TabBar上显示内容。

CustomBuilder: 构造器,内部可以传入组件(API8版本以上适用)。

说明:

如果icon采用svg格式图源,则要求svg图源删除其自有宽高属性值。如采用带有自有宽高属性的svg图源,icon大小则是svg本身内置的宽高属性值大小。

tabBar9+

SubTabBarStyle | BottomTabBarStyle

设置TabBar上显示内容。

SubTabBarStyle: 子页签样式,参数为文字。

BottomTabBarStyle: 底部页签和侧边页签样式,参数为文字和图片。

说明:

底部样式没有下划线效果。icon异常时显示灰色图块。

说明
  • TabContent组件不支持设置通用宽度属性,其宽度默认撑满Tabs父组件。
  • TabContent组件不支持设置通用高度属性,其高度由Tabs父组件高度与TabBar组件高度决定。
  • vertical属性为false值,交换上述2个限制。
  • TabContent组件不支持内容过长时页面的滑动,如需页面滑动,可嵌套List使用。

SubTabBarStyle9+

子页签样式。

constructor9+

constructor(content: string | Resource)

SubTabBarStyle的构造函数。

参数:

参数名

参数类型

必填

参数描述

content

string | Resource

页签内的文字内容。

BottomTabBarStyle9+

底部页签和侧边页签样式。

constructor9+

constructor(icon: string | Resource, text: string | Resource)

BottomTabBarStyle的构造函数。

参数:

参数名

参数类型

必填

参数描述

icon

string | Resource

页签内的图片内容。

text

string | Resource

页签内的文字内容。

示例

示例1:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct TabContentExample {
  5. @State fontColor: string = '#182431'
  6. @State selectedFontColor: string = '#007DFF'
  7. @State currentIndex: number = 0
  8. private controller: TabsController = new TabsController()
  9. @Builder TabBuilder(index: number) {
  10. Column() {
  11. Image(this.currentIndex === index ? '/common/public_icon_on.svg' : '/common/public_icon_off.svg')
  12. .width(24)
  13. .height(24)
  14. .margin({ bottom: 4 })
  15. .objectFit(ImageFit.Contain)
  16. Text(`Tab${index + 1}`)
  17. .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
  18. .fontSize(10)
  19. .fontWeight(500)
  20. .lineHeight(14)
  21. }.width('100%')
  22. }
  23. build() {
  24. Column() {
  25. Tabs({ barPosition: BarPosition.End, controller: this.controller }) {
  26. TabContent() {
  27. Column() {
  28. Text('Tab1')
  29. .fontSize(36)
  30. .fontColor('#182431')
  31. .fontWeight(500)
  32. .opacity(0.4)
  33. .margin({ top: 30, bottom: 56.5 })
  34. Divider()
  35. .strokeWidth(0.5)
  36. .color('#182431')
  37. .opacity(0.05)
  38. }.width('100%')
  39. }.tabBar(this.TabBuilder(0))
  40. TabContent() {
  41. Column() {
  42. Text('Tab2')
  43. .fontSize(36)
  44. .fontColor('#182431')
  45. .fontWeight(500)
  46. .opacity(0.4)
  47. .margin({ top: 30, bottom: 56.5 })
  48. Divider()
  49. .strokeWidth(0.5)
  50. .color('#182431')
  51. .opacity(0.05)
  52. }.width('100%')
  53. }.tabBar(this.TabBuilder(1))
  54. TabContent() {
  55. Column() {
  56. Text('Tab3')
  57. .fontSize(36)
  58. .fontColor('#182431')
  59. .fontWeight(500)
  60. .opacity(0.4)
  61. .margin({ top: 30, bottom: 56.5 })
  62. Divider()
  63. .strokeWidth(0.5)
  64. .color('#182431')
  65. .opacity(0.05)
  66. }.width('100%')
  67. }.tabBar(this.TabBuilder(2))
  68. TabContent() {
  69. Column() {
  70. Text('Tab4')
  71. .fontSize(36)
  72. .fontColor('#182431')
  73. .fontWeight(500)
  74. .opacity(0.4)
  75. .margin({ top: 30, bottom: 56.5 })
  76. Divider()
  77. .strokeWidth(0.5)
  78. .color('#182431')
  79. .opacity(0.05)
  80. }.width('100%')
  81. }.tabBar(this.TabBuilder(3))
  82. }
  83. .vertical(false)
  84. .barHeight(56)
  85. .onChange((index: number) => {
  86. this.currentIndex = index
  87. })
  88. .width(360)
  89. .height(190)
  90. .backgroundColor('#F1F3F5')
  91. .margin({ top: 38 })
  92. }.width('100%')
  93. }
  94. }

示例2:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct TabContentExample {
  5. @State fontColor: string = '#182431'
  6. @State selectedFontColor: string = '#007DFF'
  7. @State currentIndex: number = 0
  8. private controller: TabsController = new TabsController()
  9. @Builder TabBuilder(index: number) {
  10. Column() {
  11. Image(this.currentIndex === index ? '/common/public_icon_on.svg' : '/common/public_icon_off.svg')
  12. .width(24)
  13. .height(24)
  14. .margin({ bottom: 4 })
  15. .objectFit(ImageFit.Contain)
  16. Text('Tab')
  17. .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
  18. .fontSize(10)
  19. .fontWeight(500)
  20. .lineHeight(14)
  21. }.width('100%').height('100%').justifyContent(FlexAlign.Center)
  22. }
  23. build() {
  24. Column() {
  25. Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
  26. TabContent()
  27. .tabBar(this.TabBuilder(0))
  28. TabContent()
  29. .tabBar(this.TabBuilder(1))
  30. TabContent()
  31. .tabBar(this.TabBuilder(2))
  32. TabContent()
  33. .tabBar(this.TabBuilder(3))
  34. }
  35. .vertical(true)
  36. .barWidth(96)
  37. .barHeight(414)
  38. .onChange((index: number) => {
  39. this.currentIndex = index
  40. })
  41. .width(96)
  42. .height(414)
  43. .backgroundColor('#F1F3F5')
  44. .margin({ top: 52 })
  45. }.width('100%')
  46. }
  47. }

示例3:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct TabBarStyleExample {
  5. build() {
  6. Column({ space: 5 }) {
  7. Text("子页签样式")
  8. Column() {
  9. Tabs({ barPosition: BarPosition.Start }) {
  10. TabContent() {
  11. Column().width('100%').height('100%').backgroundColor(Color.Pink)
  12. }.tabBar(new SubTabBarStyle('Pink'))
  13. TabContent() {
  14. Column().width('100%').height('100%').backgroundColor(Color.Yellow)
  15. }.tabBar(new SubTabBarStyle('Yellow'))
  16. TabContent() {
  17. Column().width('100%').height('100%').backgroundColor(Color.Blue)
  18. }.tabBar(new SubTabBarStyle('Blue'))
  19. TabContent() {
  20. Column().width('100%').height('100%').backgroundColor(Color.Green)
  21. }.tabBar(new SubTabBarStyle('Green'))
  22. }
  23. .vertical(false)
  24. .scrollable(true)
  25. .barMode(BarMode.Fixed)
  26. .onChange((index: number) => {
  27. console.info(index.toString())
  28. })
  29. .width('100%')
  30. .backgroundColor(0xF1F3F5)
  31. }.width('100%').height(200)
  32. Text("底部页签样式")
  33. Column() {
  34. Tabs({ barPosition: BarPosition.End }) {
  35. TabContent() {
  36. Column().width('100%').height('100%').backgroundColor(Color.Pink)
  37. }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'pink'))
  38. TabContent() {
  39. Column().width('100%').height('100%').backgroundColor(Color.Yellow)
  40. }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Yellow'))
  41. TabContent() {
  42. Column().width('100%').height('100%').backgroundColor(Color.Blue)
  43. }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Blue'))
  44. TabContent() {
  45. Column().width('100%').height('100%').backgroundColor(Color.Green)
  46. }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Green'))
  47. }
  48. .vertical(false)
  49. .scrollable(true)
  50. .barMode(BarMode.Fixed)
  51. .onChange((index: number) => {
  52. console.info(index.toString())
  53. })
  54. .width('100%')
  55. .backgroundColor(0xF1F3F5)
  56. }.width('100%').height(200)
  57. Text("侧边页签样式")
  58. Column() {
  59. Tabs({ barPosition: BarPosition.Start }) {
  60. TabContent() {
  61. Column().width('100%').height('100%').backgroundColor(Color.Pink)
  62. }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'pink'))
  63. TabContent() {
  64. Column().width('100%').height('100%').backgroundColor(Color.Yellow)
  65. }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Yellow'))
  66. TabContent() {
  67. Column().width('100%').height('100%').backgroundColor(Color.Blue)
  68. }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Blue'))
  69. TabContent() {
  70. Column().width('100%').height('100%').backgroundColor(Color.Green)
  71. }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Green'))
  72. }
  73. .vertical(true).scrollable(true).barMode(BarMode.Fixed)
  74. .onChange((index: number) => {
  75. console.info(index.toString())
  76. })
  77. .width('100%')
  78. .backgroundColor(0xF1F3F5)
  79. }.width('100%').height(400)
  80. }
  81. }
  82. }

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号