HarmonyOS鸿蒙Next中tabs点击文字中心没有响应,点击文字下方才有反应,同样的代码在api17没有问题

HarmonyOS鸿蒙Next中tabs点击文字中心没有响应,点击文字下方才有反应,同样的代码在api17没有问题 【问题描述】:tabs点击文字中心没有响应,点击文字下方才有反应

【问题现象】:tabs点击文字中心没有响应,点击文字下方才有反应,问题现象见附件

【版本信息】:deveco版本6.01、手机操作系统版本6.00、api语言版本Api20

【复现代码】:

import { HdsTabs, HdsTabsController,HdsTabsAttribute } from "@kit.UIDesignKit";

@Component
export struct Record {
  @Consume('pathStack') pathStack: NavPathStack
  @State activeIndex: number = 0
  private controller: HdsTabsController = new HdsTabsController();
  @Builder
  single(name: string, index: number) {
    Row() {
      Text(name)
        .fontColor(index == this.activeIndex ? $r('app.color.backGroundWhite') : $r('app.color.grayFont'))
        .textAlign(TextAlign.Center)
        .width('100%')
    }
    .width(80)
    .height(40)
    .border({ width: 0.1, color: $r('app.color.lightGray'), radius: 16 })
    .backgroundColor(index == this.activeIndex ? $r('app.color.blueFont') : $r('app.color.lightGray'))
  }
  tabList: string[] = ['今天', '本周', '本月','全部']
  build() {
    Column(){
      HdsTabs({controller:this.controller}) {
        ForEach(this.tabList, (item: string, index: number) => {
          TabContent() {
            if (this.activeIndex == 0) {
            } else if (this.activeIndex == 1) {
            } else if (this.activeIndex==2) {
            }else {
            }
          }.tabBar(this.single(item,index))
        })
      }
      .scrollable(false)
      .animationDuration(0)
      .barWidth('100%')
      .barMode(BarMode.Scrollable)
      .onTabBarClick((index) => {
        this.activeIndex = index
      })
    }
    .padding({ left: 16, right: 16, top: '30%' })
  }
}

【尝试解决方案】:把barHeight改成76或者更高


更多关于HarmonyOS鸿蒙Next中tabs点击文字中心没有响应,点击文字下方才有反应,同样的代码在api17没有问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

开发者你好,这边使用DevEco Studio 6.0.1 Beta1和6.0.0 API 20版本设备在本地引入您提供的Record组件未复现问题,点击文本中心可以正常切换Tab,方便的话可以提供一个最小demo以便复现分析问题吗?

本地尝试复现的代码:

import { HdsTabs, HdsTabsController, HdsTabsAttribute } from "@kit.UIDesignKit";

@Entry
@Component
struct Index {
  @Provide('pathStack') pathStack: NavPathStack = new NavPathStack()

  @Builder
  PageMap(name: string) {
    if (name === 'Record') {
      Record()
    }
  }

  build() {
    Navigation(this.pathStack) {
      Button('Record', { stateEffect: true, type: ButtonType.Capsule })
        .width('50%')
        .height(40)
        .onClick(() => {
          this.pathStack.pushPath({ name: 'Record' })
        })
    }
    .navDestination(this.PageMap)
    .mode(NavigationMode.Stack)
  }
}

@Component
export struct Record {
  @Consume('pathStack') pathStack: NavPathStack
  @State activeIndex: number = 0
  private controller: HdsTabsController = new HdsTabsController();

  @Builder
  single(name: string, index: number) {
    Row() {
      Text(name)
        .fontColor(index == this.activeIndex ? Color.White : Color.Gray)
        .textAlign(TextAlign.Center)
        .width('100%')
    }
    .width(80)
    .height(40)
    .border({ width: 0.1, color: Color.Gray, radius: 16 })
    .backgroundColor(index == this.activeIndex ? Color.Blue : Color.Gray)
  }

  tabList: string[] = ['今天', '本周', '本月', '全部']

  build() {
    NavDestination() {
      Column() {
        HdsTabs({ controller: this.controller }) {
          ForEach(this.tabList, (item: string, index: number) => {
            TabContent() {
              if (this.activeIndex == 0) {
              } else if (this.activeIndex == 1) {
              } else if (this.activeIndex == 2) {
              } else {
              }
            }.tabBar(this.single(item, index))
          })
        }
        .scrollable(false)
        .animationDuration(0)
        .barWidth('100%')
        .barMode(BarMode.Scrollable)
        .onTabBarClick((index) => {
          this.activeIndex = index
        })
      }
      .padding({ left: 16, right: 16, top: '30%' })
    }
  }
}

更多关于HarmonyOS鸿蒙Next中tabs点击文字中心没有响应,点击文字下方才有反应,同样的代码在api17没有问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


该问题属于HarmonyOS Next的Tab组件点击区域识别异常。在API17中Tab组件能正确识别整个文字区域作为热区,而Next版本可能存在布局计算或事件分发机制的变更。建议检查Tab组件在Next系统中的默认内边距(padding)和触摸事件绑定范围,可能是组件对触摸事件的响应区域被限制在了文字基线以下范围。需要针对Next系统调整Tab组件的触摸响应参数。

从代码分析,这是API 20中HdsTabs组件的事件响应区域问题。在API 17正常但在API 20出现点击文字中心无响应,点击文字下方才有反应,这很可能是组件在最新版本中的点击事件处理逻辑发生了变化。

问题可能出在TabContent的tabBar构建器上。你使用的Row容器设置了固定高度40,但HdsTabs组件内部可能对点击区域有新的布局约束。建议检查:

  1. 移除Row的固定高度设置,或调整为与HdsTabs默认高度匹配
  2. 确认Text组件的布局属性,尝试移除width(‘100%’)设置
  3. 检查HdsTabs的barHeight默认值,在API 20中可能有所调整

这是版本兼容性问题,建议对比API 17和API 20的HdsTabs组件文档,查看布局参数的变化。

回到顶部