HarmonyOS 鸿蒙Next 给一个Tabs动态修改TabBar文案的demo

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 给一个Tabs动态修改TabBar文案的demo

我们这边的的Tab页面TabBar的文案会根据用户的登录态来展示不同的文案。

希望有一个Tabs动态修改TabBar文案的demo 

2 回复

可以参考下面的demo:

[@Entry](/user/Entry)

[@Component](/user/Component)

struct TabsExample {

 [@State](/user/State) fontColor: string = '#182431'

 [@State](/user/State) selectedFontColor: string = '#007DFF'

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

 private controller: TabsController = new TabsController()

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



 [@Builder](/user/Builder) tabBuilder(index: number, name: string) {

   Column() {

     Text(name)

       .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)

       .fontSize(16)

       .fontWeight(this.currentIndex === index ? 500 : 400)

       .lineHeight(22)

       .margin({ top: 17, bottom: 7 })

     Divider()

       .strokeWidth(2)

       .color('#007DFF')

       .opacity(this.currentIndex === index ? 1 : 0)

   }.width('100%')

 }

 build() {

   Column() {

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

       TabContent() {

         Column(){

           Button("登录").onClick(() =>{

             this.isLogin = true

           })

           Button("退出登录").onClick(() =>{

             this.isLogin = false

           })

         }.width('100%').height('100%')

       }.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'))

       if(this.isLogin){

         TabContent() {

           Column().width('100%').height('100%').backgroundColor('#E67C92')

         }.tabBar(this.tabBuilder(3, '登录显示'))

       }

     }

     .vertical(false)

     .barMode(BarMode.Fixed)

     .barWidth(360)

     .barHeight(56)

     .animationDuration(400)

     .onChange((index: number) => {

       this.currentIndex = index

     })

     .width(360)

     .height(296)

     .margin({ top: 52 })

     .backgroundColor('#F1F3F5')

   }.width('100%')

 }

}

更多关于HarmonyOS 鸿蒙Next 给一个Tabs动态修改TabBar文案的demo的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,你可以通过修改TabBar的相关属性来动态更改其文案。以下是一个简单的示例代码,演示了如何动态修改TabBar的文案。

首先,假设你已经创建了一个包含TabBar的页面,并且TabBar中有几个Tab项。

<!-- resource/base/element/tabs_bar.xml -->
<tabs-bar>
    <tab>
        <text>原始文案1</text>
    </tab>
    <tab>
        <text>原始文案2</text>
    </tab>
</tabs-bar>

在JavaScript代码中,你可以通过以下方式修改TabBar的文案:

// pages/index/index.js
export default {
    data() {
        return {};
    },
    changeTabBarText(index, newText) {
        let tabsBar = this.$element('tabs-bar');
        if (tabsBar && tabsBar.tabs && tabsBar.tabs[index]) {
            tabsBar.tabs[index].text = newText;
            tabsBar.refresh(); // 假设存在一个refresh方法用于刷新UI,具体实现需参考API文档
        }
    },
    onInit() {
        this.changeTabBarText(0, '新文案1');
        this.changeTabBarText(1, '新文案2');
    }
}

请注意,上述代码中的refresh方法是一个假设的方法,用于刷新TabBar的UI。实际开发中,你需要参考HarmonyOS的官方API文档来找到正确的方法来刷新UI。

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

回到顶部