【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 小时前
鸿蒙应用开发之实现键值型数据库跨设备数据同步
数据库·wpf·harmonyos
默 语10 小时前
Electron 应用中的系统检测方案对比与鸿蒙适配实践
javascript·electron·harmonyos·gwo
竹君子11 小时前
研发管理知识库(4)华为研发管理流程简介
华为
ifeng091812 小时前
HarmonyOS资源加载进阶:惰性加载、预加载与缓存机制
深度学习·缓存·harmonyos
爱笑的眼睛1115 小时前
HarmonyOS列表项滑动操作深度解析:从基础实现到高级交互
华为·harmonyos
ifeng091816 小时前
HarmonyOS状态管理精细化:控制渲染范围与变量拆分策略
华为·harmonyos
智能与未来17 小时前
华为芯片、OS、DB和技术平台等全面开源,MetaERP天然底座优势
华为·业界资讯
若安程序开发17 小时前
web华为商城前端项目4页面
前端·华为
万少20 小时前
记第一次鸿蒙应用上架之旅:一场略带遗憾的旅途
前端·harmonyos
HarmonyOS_SDK1 天前
【FAQ】HarmonyOS SDK 闭源开放能力 — Network Kit
harmonyos