HarmonyOS鸿蒙Next中有可以Hook某个组件的属性的方法? 由于图片的draggable默认是开启的,想统一进行关闭

HarmonyOS鸿蒙Next中有可以Hook某个组件的属性的方法? 由于图片的draggable默认是开启的,想统一进行关闭 由于

draggable9+ boolean 组件默认拖拽效果,设置为true时,组件可拖拽。
API version 9及之前,默认值为false。API version 10及之后,默认值为true。

地址: https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-image-0000001815927572#ZH-CN_TOPIC_0000001815927572__imageerror9

想一键设置禁止图片的可拖拽位, 不然需要把项目中的图片全部都要设置一边, 有点费劲, 谁知道有啥好的方法吗?


更多关于HarmonyOS鸿蒙Next中有可以Hook某个组件的属性的方法? 由于图片的draggable默认是开启的,想统一进行关闭的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

没办法,类似的问题很多,比如引入的字体,也是每个Text都要设置一遍。

换个思路,可以自定义一个MyImage,然后其它页面都使用MyImage()代替系统的Image,将来想追加什么属性、或者断拦截处理也方便。

更多关于HarmonyOS鸿蒙Next中有可以Hook某个组件的属性的方法? 由于图片的draggable默认是开启的,想统一进行关闭的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这种情况每个使用的地方都需要引入自己写的 myImage, 这样的话, 解耦太难受了, 而且像设置image属性还不能直接myImage设置, ,

在HarmonyOS NEXT中,无法直接Hook组件的默认属性。可自定义Image子组件,内部设置.draggable(false),然后全局替换原Image组件使用。或者使用@Builder封装公共图片组件,统一关闭拖拽。无其他原生Hook机制。

ArkUI 并没有提供可直接全局 Hook 组件属性的机制,无法一键修改所有原生 Image 的默认 draggable 值。要统一关闭图片拖拽,通常采用两种轻量封装方式,让每处使用只需声明一次即可生效。

方式一:@Extend 扩展(推荐)
定义一个扩展函数,将 draggable 强制设为 false,在所有需要关闭拖拽的 Image 上调用该函数。无需额外组件,清晰直观。

[@Extend](/user/Extend)(Image) function disableDrag() {
  .draggable(false)
}

// 使用
Image($r('app.media.icon'))
  .width(100)
  .height(100)
  .disableDrag()

方式二:封装自定义组件
新建一个 NoDragImage 组件,内部使用 Image 并设置 draggable(false),全局用该组件替换原生 Image

@Component
struct NoDragImage {
  @Prop src: ResourceStr
  build() {
    Image(this.src)
      .draggable(false)
  }
}

// 使用
NoDragImage({ src: $r('app.media.icon') })

两种方式均能实现一处定义、全局统一,且不影响图片的其他属性。

回到顶部