HarmonyOS 鸿蒙Next触摸事件拦截问题

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

HarmonyOS 鸿蒙Next触摸事件拦截问题

Stack中有两个StackA和StackB, 希望StackB不阻塞事件,但是需要StackB的子组件可以拦截StackA的事件
hitTestBehavior(value: HitTestMode)未找到合适的类型

[@Entry](/user/Entry)  
[@Component](/user/Component)  
struct HitTestBehaviorExample {  
build() {  
// outer stack  
Stack() {  
Stack() {  
 
}.backgroundColor(Color.Blue)  
.width("100%").height("100%")  
.onTouch((event) => {  
console.info('stack AAA touched')  
})  
 
Stack() {  
Text('stack BBB button')  
.size({width : 60, height : 60})  
.onTouch((event) => {  
console.info('stack BBB button touched============')  
})  
}.backgroundColor(Color.Red)  
.hitTestBehavior(HitTestMode.Transparent)  
.width("100%").height("50%")  
 
}  
}  
}

5 回复
event.stopPropagation();
@Entry
@Component
struct HitTestBehaviorExample {
  build() {
    // outer stack
    Stack() {
      Stack() {

      }.backgroundColor(Color.Blue)
      .width("100%").height("100%")
      .onTouch((event) => {
        console.info('stack AAA touched')
      })

      Stack() {
        Text('stack BBB button')
          .size({width : 60, height : 60})
          .onTouch((event) => {
            console.info('stack BBB button touched============')
            event.stopPropagation();
          })
      }.backgroundColor(Color.Red)
      .hitTestBehavior(HitTestMode.Transparent)
      .width("100%").height("50%")

    }
  }
}

验证貌似不行诶

我又试了一下,没问题啊,当触碰到B时,【stack BBB button touched============】当触屏到其它位置是【stack AAA touched】

楼主看下验证步骤对吗

针对HarmonyOS 鸿蒙Next触摸事件拦截问题,以下是一些专业的解答:

在HarmonyOS鸿蒙Next中,触摸事件拦截通常涉及组件的HitTestMode属性和事件处理机制。

首先,可以通过设置组件的HitTestMode属性来控制其是否响应触摸事件。例如,将组件的HitTestMode设置为Transparent,则该组件会变为透明,不会阻塞触摸事件,但其子组件仍然可以拦截并处理事件。

其次,在事件处理机制中,可以为需要响应触摸事件的组件设置onTouch事件监听器,并在回调函数中编写相应的处理逻辑。如果希望在某个组件上拦截触摸事件并阻止其向下传播,可以在回调函数中调用event.stopPropagation()方法。

此外,还可以利用ArkTS框架提供的onTouchIntercept方法来自定义事件拦截逻辑。该方法允许开发者根据事件信息(如按下位置、输入源等)决定组件的HitTestMode属性,从而实现对触摸事件的精细控制。

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

回到顶部