HarmonyOS 鸿蒙Next Tabs自定义tab展示内容,Tabs组件设置borderRadius无效

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Tabs自定义tab展示内容,Tabs组件设置borderRadius无效

使用官方Tabs组件集合TabContent、tabBar自定义tab样式,期望将Tabs组件边缘设置圆角,但是使用 borderRadius设置是无效的,展示的直角的。 现有代码

Tabs({ controller: this.tabsController }) {
      ForEach(this.builderArr, (item: WrappedBuilder<[Object]>, index) => {
        TabContent() {
          item.builder({})
        }.tabBar(this.tabBarBuilder(this.titles[index], index, this.tabConfig)).align(Alignment.Top)
      })
    }
    .onChange((index) => {
      this.currentIndex = index
    })
    .scrollable(this.tabConfig.scrollable)
    .barBackgroundColor(this.tabConfig.bgColor)
    .barHeight(this.tabConfig.barHeight)
    .borderRadius(20)
    .barWidth('90%')
	```

更多关于HarmonyOS 鸿蒙Next Tabs自定义tab展示内容,Tabs组件设置borderRadius无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

目前不支持单独给Tabs的tabBar设置圆角,可通过自定义的tabBar来实现,参考以下示例:

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Index {

  [@State](/user/State) tabArray: Array<string> = ['制冷','制热']

  [@State](/user/State) focusIndex: number = 0

  [@State](/user/State) pre: number = 0

  [@State](/user/State) index: number = 0

  private controller: TabsController = new TabsController()

  [@State](/user/State) test: boolean = false

  [@State](/user/State) tabHeight:number = 60

  // 单独的页签

  [@Builder](/user/Builder)

  Tab(tabName: string, tabItem: string, tabIndex: number) {

    Column() {

      Text(tabName).fontSize(18)

    }

    .justifyContent(FlexAlign.Center)

    .alignItems(HorizontalAlign.Center)

    .width('46%')

    .margin(tabIndex ==0? {left:10,top:10,bottom:10}:{right:10,top:10,bottom:10})

    .height(this.tabHeight)

    .borderRadius(15)

    .onClick(() => {

      this.controller.changeIndex(tabIndex)

      this.focusIndex = tabIndex

    })

    .backgroundColor(tabIndex === this.focusIndex ? "#ffffffff" : "#ffe3dcdc")

  }

  build() {

    Column() {

      Column() {

        // 页签

        Row({ space: 7 }) {

          ForEach(this.tabArray, (item: string, index: number) => {

            this.Tab( item, item, index)

          })

        }

        .width('94%')

        .margin({top:55,left:'3%',right:'3%'})

        .backgroundColor("#ffe3dcdc")

        .borderRadius(15)

        //tabs

        Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {

          ForEach(this.tabArray, (item: string, index: number) => {

            TabContent() {

            }

          })

        }

        .barHeight(0)

        .animationDuration(100)

        .onChange((index: number) => {

          console.log('foo change')

          this.focusIndex = index

        })

      }

      .alignItems(HorizontalAlign.Start)

      .width('100%')

    }

    .height('100%')

  }

}

更多关于HarmonyOS 鸿蒙Next Tabs自定义tab展示内容,Tabs组件设置borderRadius无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,针对Next Tabs组件自定义tab展示内容以及设置borderRadius无效的问题,可以通过以下方式处理:

  1. 自定义Tab展示内容

    • 确保在Tabs组件的TabItem子组件中,通过自定义布局和样式来实现特定内容的展示。
    • 使用自定义组件或布局(如DirectionLayout、StackLayout等)来包裹TabItem内的内容,并设置相应的属性来展示所需的内容。
  2. borderRadius设置无效

    • 鸿蒙系统中,某些组件的样式属性可能不支持直接设置borderRadius。
    • 若直接在Tabs组件或其子组件上设置borderRadius无效,可以考虑通过包裹一层支持borderRadius的组件(如ShapeElement或自定义的装饰组件)来实现圆角效果。
    • 检查样式属性的设置是否正确,确保borderRadius的值被正确解析和应用。

示例代码片段(简化):

<DirectionLayout
    ohos:width="match_parent"
    ohos:height="match_parent"
    ohos:orientation="vertical">
    <Tabs
        ohos:id="$+id:tabs"
        ohos:width="match_parent"
        ohos:height="wrap_content">
        <TabItem>
            <DirectionLayout
                ohos:width="match_parent"
                ohos:height="wrap_content"
                ohos:padding="16vp">
                <!-- 自定义内容 -->
            </DirectionLayout>
        </TabItem>
        <!-- 更多TabItem -->
    </Tabs>
    <!-- 其他内容 -->
</DirectionLayout>

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部