HarmonyOS鸿蒙Next中怎么禁止双指长按提取图片,和单指长按拖动图片

HarmonyOS鸿蒙Next中怎么禁止双指长按提取图片,和单指长按拖动图片 想全局禁止,后者通过设置

Image().draggable(false)

前者怎么弄?而且后者我想全局的Image都禁止

8 回复

开发者您好,

  1. 如果您想要禁止双指长按提取图片,您这边需要:进入【设置】→【小艺】→【唤醒】→【双指长按识屏】,关闭该开关即可。

  2. 可以定义全局样式,使用Image组件直接调用即可。

@Styles
function globalFancy() {
  .draggable(false);
}

或者自定义一个Image组件。

@Component
export struct CustomImage {
  @Prop src: ResourceStr = '';

  build() {
    Image(this.src)
      .draggable(false);
  }
}

//...使用示例
@Entry
@Component
struct PageA {
  build() {
    Column() {
      CustomImage({ src: $r('app.media.startIcon') });
    };
  }
}

更多关于HarmonyOS鸿蒙Next中怎么禁止双指长按提取图片,和单指长按拖动图片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


1、前者目前没有开放相关API来禁止双指唤起小艺提取图片的行为;

2、后者全局设置可以通过自定义组件的形式,例如

@Component
export struct cusImage{
  @Prop src?: Resource
  build(){
    Image(this.src)
    .draggable(false)
  }
}

//...使用示例
@Entry
@Component
struct PageA{
  build(){
    cusImage($r('app.media.test'))
  }
}

目前系统默认为双指按压进行识别内容,可以通过Image进行全局查看

全局只能自己自定义一个Image组件了。

@Component
struct CustomImage {
  private src: Resource | string = ''
  
  build() {
    Image(this.src)
      .draggable(false) // 默认禁用拖拽
      // 可继续添加其他通用样式
  }
}

// 全局使用替代原生Image
CustomImage({ src: $r('app.media.logo') })

需要找华为申请白名单

申请后要等华为的手机版本更新后才支持

大部分应用都有这个问题,等待API更新修复吧

在HarmonyOS Next中,禁止双指长按提取图片和单指长按拖动图片的功能,可以通过修改图片组件的属性实现。对于双指长按提取图片,设置Image组件的copyable属性为false。对于单指长按拖动图片,设置Image组件的draggable属性为false。这两个属性默认可能为true,修改后即可禁用相应交互。

在HarmonyOS Next中,要全局禁止Image组件的长按拖拽和双指长按提取功能,可以通过自定义组件封装或修改全局样式实现。

1. 全局禁止单指长按拖拽: 您提到的.draggable(false)方法是正确的。要实现全局禁止,建议创建一个自定义的CustomImage组件,在其中统一设置该属性,并在应用中替换所有Image组件。

// CustomImage.ets
@Component
export struct CustomImage {
  @Prop src: Resource | string | PixelMap
  
  build() {
    Image(this.src)
      .draggable(false) // 全局禁用拖拽
  }
}

2. 禁止双指长按提取图片: 这需要通过设置onGesture手势事件拦截来实现。在自定义组件中添加手势识别,当检测到双指长按时阻止默认行为。

// CustomImage.ets 完整示例
@Component
export struct CustomImage {
  @Prop src: Resource | string | PixelMap
  
  build() {
    Image(this.src)
      .draggable(false)
      .gesture(
        // 识别并拦截双指长按
        LongPressGesture({ fingers: 2 })
          .onAction(() => {
            // 空实现,拦截但不执行任何操作
            console.log('双指长按被拦截');
          })
      )
  }
}

3. 替代方案:使用修饰器函数 如果希望更灵活地控制,可以创建一个修饰器函数:

// 全局修饰器
function disableImageGestures(image: ImageAttribute) {
  image
    .draggable(false)
    .gesture(
      LongPressGesture({ fingers: 2 })
        .onAction(() => {})
    )
}

// 使用示例
Image($r('app.media.icon'))
  .apply(disableImageGestures)

这样设置后,所有使用CustomImage或应用了修饰器的图片组件都将同时禁用单指拖拽和双指长按提取功能。

回到顶部