【HarmonyOS】View点击穿透,层叠View点击事件控制

【HarmonyOS】View点击穿透,层叠View点击事件控制

问题背景:

在HarmonyOS中,经常会有层叠的View的布局,当碰到需要穿透的布局需求。就需要能控制View对点击事件的处理。

方案一,使用touchable:

目前虽然函数已提示过时,会有斜线,但是改方法比较简单。

在view节点设置:

touchable(true) 可接受点击

touchable(false) 不处理点击,点击事件就会有穿透效果。

Demo示例:

dart 复制代码
@Entry
@Component
struct Index {

  build() {
    Stack(){
      Column(){
        // B布局.
      }
      .width("100%")
      .height("100%")
      .onClick(()=>{
        console.log("debugTest", "click B!");
      })
      
      Row(){
        // A布局。当父布局是stack,包裹的布局中,最下面的view会在最上层。此时A会遮挡B的点击事件。
      }
      .width("100%")
      .height("100%")
      .touchable(false)
      .onClick(()=>{
        console.log("debugTest", "click A!");
      })
    }
  }
}

方案二,使用hitTestBehavior

在view节点设置hitTestBehavior

HitTestMode为枚举类型,有三个值,分别如下:
Default 0

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

Block 1

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

Transparent 2

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

None 3

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

Demo示例:

dart 复制代码
@Entry
@Component
struct Index {

  build() {
    Stack(){
      Column(){
        // B布局.
      }
      .width("100%")
      .height("100%")
      .onClick(()=>{
        console.log("debugTest", "click B!");
      })
      
      Row(){
        // A布局。当父布局是stack,包裹的布局中,最下面的view会在最上层。此时A会遮挡B的点击事件。
      }
      .width("100%")
      .height("100%")
      .hitTestBehavior(HitTestMode.Transparent)
      .onClick(()=>{
        console.log("debugTest", "click A!");
      })
    }
  }
}
相关推荐
行者-全栈开发8 小时前
【鸿蒙心迹】深色模式适配全链路——从配置到自定义(HarmonyOS 7.x)
华为·harmonyos
行者-全栈开发18 小时前
【鸿蒙心迹】国际化 i18n 与多语言资源管理实战(HarmonyOS 7.x)
ui·华为·重构·国际化·harmonyos·多语言
OH_TPC20 小时前
HarmonyOS APP开发---"云客服"远程视频客服App,需要用到这个库
harmonyos
逆回1 天前
给鸿蒙手机做一只 3D 宠物:五个把我卡住的问题
harmonyos
钉先生贾2 天前
性能、体积与稳定性:怎样写出可信的适配结论
华为·harmonyos
笑 总不会犯错2 天前
摆脱多端数据撕裂,鸿蒙分布式数据库同步与冲突合并
harmonyos
用户117910488332 天前
鸿蒙签名失败不是玄学:5 个证据点把 hapsigntool 一次排通 GitHub:swsgbl/hmharness
开源·ai编程·harmonyos
redtank20002 天前
纯血鸿蒙小工具三件套实测:弹幕手持、爱记录与仓库管理软件
学习·华为·智能手机·harmonyos
xyzzklk2 天前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
用户86194177207413 天前
uni-app 的蓝牙 API 在鸿蒙上不生效?我写了个兼容层,让老代码零改动跑起来
harmonyos