HarmonyOS 自定义tabs点击非文字和图片区域,页面切换,文字图片未高亮

import BeginnerModeTab from '../components/tabs/BeginnerModeTab'
import ProModeTab from '../components/tabs/ProModeTab'
import AverageLawTab from '../components/tabs/AverageLawTab'
import MetronomeTab from '../components/tabs/MetronomeTab'

let storage = LocalStorage.getShared()

interface beginnerModeTabProps {
  phoneticName: string
}

@Entry(storage)
@Component
struct Index {
  // bottomRectHeight: string = AppStorage.get<number>('bottomRectHeight') + 'px';
  @LocalStorageLink('phoneticName') phoneticName: string = 'D';
  @State currentIndex: number = 0; // 当前tab值
  private tabsController: TabsController = new TabsController();

  // 自定义tabs
  @Builder
  TabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
    Column() {
      Image(this.currentIndex === targetIndex ? normalImg : selectedImg)
        .size({ width: 25, height: 25 })
      Text(title)
        .fontColor(this.currentIndex === targetIndex ? '#fff' : '#999')
        .fontSize(12)
    }
    .width('101%')
    // .height(50)
    .justifyContent(FlexAlign.Center)
    .backgroundColor('#78c371') // 设置Tabs组件背景颜色
    .borderWidth(0) // 移除边框宽度
    .padding(0) // 确保没有多余的填充
    .margin(0) // 确保没有多余的边距
    .onClick(() => {
      this.currentIndex = targetIndex;
      this.tabsController.changeIndex(this.currentIndex);
    })
  }

  build() {
    Tabs({ barPosition: BarPosition.End, index: this.currentIndex, controller: this.tabsController }) {
      // 初学模式
      TabContent() {
        Column() {
          BeginnerModeTab({
            // test: 'null'
            phoneticName: this.phoneticName
          })
        }
        .width('100%')
        .height('100%')
        .backgroundColor('#fff')
        .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]) // 图片组件的绘制区域扩展至状态栏和导航条。
      }
      .tabBar(this.TabBuilder('初学模式', 0, $r('app.media.icon_mode_junior_sel'), $r('app.media.icon_mode_junior')))

      // 专业模式
      TabContent() {
        Column() {
          ProModeTab()
        }
        .width('100%')
        .height('100%')
        .backgroundColor('#3a3a3a')
        .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
      }
      .tabBar(this.TabBuilder('专业模式', 1, $r('app.media.icon_mode_pro_sel'), $r('app.media.icon_mode_pro')))

      // 十二平均律
      TabContent() {
        Column() {
          AverageLawTab()
        }
        .width('100%')
        .height('100%')
        .backgroundColor('#3a3a3a')
        .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
      }
      .tabBar(this.TabBuilder('十二平均律', 2, $r('app.media.icon_mode_average_sel'),
        $r('app.media.icon_mode_average')))

      // 节拍器
      TabContent() {
        Column() {
          // 添加你的内容
          MetronomeTab()
        }
        .width('100%')
        .height('100%')
        .backgroundColor('#fff')
        .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
      }
      .tabBar(this.TabBuilder('节拍器', 3, $r('app.media.icon_mode_metronome_sel'),
        $r('app.media.icon_mode_metronome')))
    }
    .backgroundColor('#78c371') // 确保Tabs组件背景颜色为绿色
    .borderWidth(0) // 确保Tabs组件没有边框
    .padding(0) // 确保Tabs组件没有多余的填充
    .margin(0) // 确保Tabs组件没有多余的边距
    .scrollable(false)
    .animationDuration(0)
    .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]) // 图片组件的绘制区域扩展至状态栏和导航条。
    // .margin({ top: this.bottomRectHeight, bottom: this.bottomRectHeight }) // 此处margin具体数值在实际中应与导航条区域高度保持一致
  }

  aboutToAppear(): void {
    console.log(this.phoneticName, 'hahaha')
  }
}
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

可以试下将TabBuilder中onClick点击事件注释掉,使用Tabs组件的onChange事件,如:

Tabs({ barPosition: BarPosition.End, index: this.currentIndex, controller: this.tabsController }) {
  ...
}
.onChange((index: number) => {
  this.currentIndex = index
})
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 图片+文字排列问题
75浏览 • 1回复 待解决
HarmonyOS 文字fontFamily生效
32浏览 • 1回复 待解决
Text匹配文字高亮显示
856浏览 • 1回复 待解决
是否可以自定义权限弹框文字
1713浏览 • 1回复 待解决
HarmonyOS 怎么高亮显示搜索的文字
32浏览 • 1回复 待解决
HarmonyOS Text部分文字高亮设置
25浏览 • 1回复 待解决
HarmonyOS 自定义图片选择界面
42浏览 • 1回复 待解决
指定页面区域转化为图片
1993浏览 • 1回复 待解决