HarmonyOS 鸿蒙Next ImageKnifeComponent 父控件无法响应点击事件

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

HarmonyOS 鸿蒙Next ImageKnifeComponent 父控件无法响应点击事件

如题,父View中使用ImageKnifeComponent,点击图片区域父View的onClick无回调。
有什么解决方案吗,设置 hitTestBehavior(HitTestMode.Transparent) 也无效。
build() {
Column() {
ImageKnifeComponent({
imageKnifeOption: {
loadSrc: ‘’
}
})
}
.onClick(() => {
//无回调
})
}

5 回复

可以给父组件添加.hitTestBehavior(HitTestMode.Block)属性,自身响应触摸测试,阻塞子节点和兄弟节点的触摸测试。

import { ImageKnifeComponent, ImageKnifeOption } from '@ohos/imageknife'

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  @State option: ImageKnifeOption = {
    loadSrc: $r('app.media.app_icon')
  }

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        ImageKnifeComponent({ imageKnifeOption: this.option })
          .width(300)
          .height(300)
      }.width('100%')
      .hitTestBehavior(HitTestMode.Block)
      .onClick(()=>{
        console.info('回调成功')
      })
    }.height('100%')
  }
}

方案一:给图片添加.draggable(false)

参考:https://developer.huawei.com/consumer/cn/forum/topic/0203150373715175232?fid=0109140870620153026

方案二:添加.hitTestBehavior(HitTestMode.None)

class ImageKnifeOption {
  loadSrc: string|Resource = ""
}

@Component
struct ImageKnifeComponent {
  @Prop imageKnifeOption: ImageKnifeOption

  build() {
    Column() {
      Image(this.imageKnifeOption.loadSrc).width('200lpx').height('200lpx').draggable(false)
    }.gesture(
      LongPressGesture({ repeat: false })// 由于repeat设置为true,长按动作存在时会连续触发,触发间隔为duration(默认值500ms)
        .onAction((event: GestureEvent) => {
          console.info('====event.repeat', event.repeat)
        })// 长按动作一结束触发
        .onActionEnd(() => {
          console.info('====event onActionEnd')
        })
    )
  }
}

@Entry
@Component
struct Page029 {
  build() {
    Column() {
      Column() {
        ImageKnifeComponent({
          imageKnifeOption: {
            loadSrc: $r('app.media.app_icon')
          }
        }).hitTestBehavior(HitTestMode.None)
      }
      .onClick(() => {
        console.info('----测试')
      })
    }
    .width('100%')
    .height('100%')
  }
}

大佬 我使用的是 第三方库 https://gitee.com/openharmony-tpc/ImageKnife 按你所说的方案二设置也是无效的

我也没搞定,可能三方库底层有适配问题吧。等其它大佬回复吧。

在HarmonyOS鸿蒙系统中,如果Next ImageKnifeComponent(假设为自定义组件或特定UI元素)导致其父控件无法响应点击事件,这通常是由于事件传递机制被阻断或事件被某个子组件独占了。以下是一些可能的原因及解决方案:

  1. 事件拦截:检查ImageKnifeComponent或其内部是否有代码拦截了点击事件(如onTouchEvent返回true),这会导致事件不继续向上传递。

  2. 焦点与可点击性:确保父控件是可点击的(clickable=true)且能接收焦点(focusable=true)。同时,确认ImageKnifeComponent没有独占焦点。

  3. 布局层级:检查布局文件,确保ImageKnifeComponent没有覆盖父控件的整个区域,从而阻止了父控件接收点击。

  4. 事件消费:在ImageKnifeComponent的点击事件中,使用requestDisallowInterceptTouchEvent(true)可能有助于允许父控件接收事件,但这需根据具体需求谨慎使用。

  5. 检查其他组件:如果父控件内还有其他子组件,确保它们没有类似的问题。

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

回到顶部