HarmonyOS 鸿蒙Next 多层Stack嵌套的场景,底层的stack点击事件都被拦截了,没办法响应

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

HarmonyOS 鸿蒙Next 多层Stack嵌套的场景,底层的stack点击事件都被拦截了,没办法响应

多层Stack嵌套的场景,底层的stack点击事件都被拦截了,没办法响应
 

2 回复

点击事件当前是有控制策略的:

Default 默认触摸测试效果,自身和子节点都响应触摸测试,但会阻塞兄弟节点的触摸测试。

Block 自身响应触摸测试,阻塞子节点和兄弟节点的触摸测试。

Transparent 自身和子节点都响应触摸测试,不会阻塞兄弟节点的触摸测试。

None 自身不响应触摸测试,不会阻塞子节点和兄弟节点的触摸测试。

参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-hit-test-behavior#hittestbehavior

参考代码:

@Entry

@Component

struct HitTestBehaviorExample {

  build() {

    // outer stack

    Stack() {

      Button('outer button')

        .onTouch((event) => {

          console.info('outer button touched type: ' + (event as TouchEvent).type)

        })

      // inner stack

      Stack() {

        Button('inner button')

          .onTouch((event) => {

            console.info('inner button touched type: ' + (event as TouchEvent).type)

          })

      }

      .width("100%").height("100%")

      .hitTestBehavior(HitTestMode.Block)

      .onTouch((event) => {

        console.info('stack touched type: ' + (event as TouchEvent).type)

      })

      Text('Transparent')

        .hitTestBehavior(HitTestMode.Transparent)

        .width("100%").height("100%")

        .onTouch((event) => {

          console.info('text touched type: ' + (event as TouchEvent).type)

        })

    }.width(300).height(300)

  }

}

更多关于HarmonyOS 鸿蒙Next 多层Stack嵌套的场景,底层的stack点击事件都被拦截了,没办法响应的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next的多层Stack嵌套场景中,底层Stack的点击事件被拦截通常是由于事件传递机制导致的。鸿蒙系统的UI框架在事件分发时会遵循特定的规则,高层级的组件可能会优先捕获并处理事件,从而阻止事件向下层传递。

为了解决这个问题,你可以尝试以下几种方法:

  1. 检查事件拦截逻辑:确保高层级的Stack没有不必要的事件拦截逻辑,或者修改拦截条件,使得特定情况下事件能够继续向下传递。

  2. 调整Stack顺序:如果可能,尝试调整Stack的嵌套顺序,将需要响应点击事件的Stack放在更高的层级。

  3. 使用事件穿透:某些情况下,可以使用特定方法或属性来允许事件穿透当前组件,继续向下传递。具体实现方式需参考鸿蒙系统的API文档。

  4. 自定义事件处理:如果上述方法不适用,可以考虑自定义事件处理逻辑,通过编程方式在高层级组件中判断事件是否应该传递给下层组件。

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

回到顶部