赞
踩
DevEco Studio版本:4.0.0.600
Tabs的链接参考:OpenHarmony Tabs
TabContent的链接参考:OpenHarmony TabContent
通过查看链接参考我们知道可以通过TabContent的tabBar来实现自定义TabBar样式(CustomBuilder)
- @Builder
- tabBuilder(index: number, name: string) {
- RelativeContainer() {
- Text(name)
- .id("textTab")
- .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
- .fontSize(16)
- .fontWeight(this.currentIndex === index ? 8 : 4)
- .margin({ top: 17, bottom: 7 })
- .alignRules({
- center: { anchor: '__container__', align: VerticalAlign.Center }, //竖直居中
- middle: { anchor: '__container__', align: HorizontalAlign.Center }//水平居中
- })
- Text("5")
- .id("textDot")
- .textAlign(TextAlign.Center)
- .backgroundColor(Color.Red)
- .borderRadius(10)
- .fontSize(12)
- .fontColor(Color.White)
- .width(20)
- .height(20)
- .alignRules({
- left: { anchor: 'textTab', align: HorizontalAlign.End },
- center: { anchor: 'textTab', align: VerticalAlign.Center }
- })
-
- Divider()
- .id("dividerTab")
- .strokeWidth(this.strokeWidth)
- .color('#007DFF')
- .opacity(this.currentIndex === index ? 1 : 0)
- .alignRules({
- bottom: { anchor: '__container__', align: VerticalAlign.Bottom }, //竖直居中
- middle: { anchor: '__container__', align: HorizontalAlign.Center }//水平居中
- })
- }.width('100%')
- }
- @Entry
- @Component
- struct Index {
- @State fontColor: string = '#111111'
- @State selectedFontColor: string = '#007DFF'
- @State currentIndex: number = 0
- private controller: TabsController = new TabsController()
- @State strokeWidth: number = 3 //下划线的宽度
-
- @Builder
- tabBuilder(index: number, name: string) {
- RelativeContainer() {
- Text(name)
- .id("textTab")
- .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
- .fontSize(16)
- .fontWeight(this.currentIndex === index ? 8 : 4)
- .margin({ top: 17, bottom: 7 })
- .alignRules({
- center: { anchor: '__container__', align: VerticalAlign.Center }, //竖直居中
- middle: { anchor: '__container__', align: HorizontalAlign.Center }//水平居中
- })
- Text("5")
- .id("textDot")
- .textAlign(TextAlign.Center)
- .backgroundColor(Color.Red)
- .borderRadius(10)
- .fontSize(12)
- .fontColor(Color.White)
- .width(20)
- .height(20)
- .alignRules({
- left: { anchor: 'textTab', align: HorizontalAlign.End },
- center: { anchor: 'textTab', align: VerticalAlign.Center }
- })
-
- Divider()
- .id("dividerTab")
- .strokeWidth(this.strokeWidth)
- .color('#007DFF')
- .opacity(this.currentIndex === index ? 1 : 0)
- .alignRules({
- bottom: { anchor: '__container__', align: VerticalAlign.Bottom }, //竖直居中
- middle: { anchor: '__container__', align: HorizontalAlign.Center }//水平居中
- })
- }.width('100%')
- }
-
- build() {
- Column() {
- Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) {
- TabContent() {
- Column().width('100%').height('100%').backgroundColor('#00CB87')
- }.tabBar(this.tabBuilder(0, 'green'))
-
- TabContent() {
- Column().width('100%').height('100%').backgroundColor('#007DFF')
- }.tabBar(this.tabBuilder(1, 'blue'))
-
- TabContent() {
- Column().width('100%').height('100%').backgroundColor('#FFBF00')
- }.tabBar(this.tabBuilder(2, 'yellow'))
-
- TabContent() {
- Column().width('100%').height('100%').backgroundColor('#E67C92')
- }.tabBar(this.tabBuilder(3, 'pink'))
- }
- .vertical(false)
- .barMode(BarMode.Fixed)
- .barHeight(56)
- .animationDuration(400)
- .onChange((index: number) => {
- this.currentIndex = index
- })
- .width('100%')
- .height('100%')
- .backgroundColor('#F1F3F5')
- }.width('100%')
- }
- }
上面的逻辑介绍是提供一种思路,根据这个思路我们可以自定义很多的TabBar的样式,来满足我们的业务需求,比如可以修改间距、颜色、大小、宽度、添加红点等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。