HarmonyOS 鸿蒙Next中,长按事件与点击事件冲突,如何区分长按和点击以正确响应?

HarmonyOS 鸿蒙Next中,长按事件与点击事件冲突,如何区分长按和点击以正确响应? 在HarmonyOS NEXT中,长按事件与点击事件冲突,如何区分长按和点击以正确响应?

2 回复

没有复现哦。

参考demo:

@Entry
@Component
struct Index {
  controller: TextController = new TextController();
  options: TextOptions = { controller: this.controller };
  onCopy = ''
  build() {
    Column() {
      Text("有子曰:“其为人也孝弟,而好犯上者,鲜矣;不好犯上而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为仁之本与!”")
        .onClick(() => {
          console.info("进入点击")
        })
        .margin({ left: 10, right: 10, top: 35 })
        .copyOption(CopyOptions.InApp)
        .onCopy((value: string) => {
          this.onCopy = value
        })
        .bindSelectionMenu(TextSpanType.TEXT, this.LongPressImageCustomMenu, TextResponseType.LONG_PRESS, {
          onDisappear: () => {
            console.info(`自定义选择菜单关闭时回调`);
          },
          onAppear: () => {
            console.info(`自定义选择菜单弹出时回调`);
          }
        })
        .onTextSelectionChange((selectionStart: number, selectionEnd: number) => {
          console.info(`文本选中区域变化回调, selectionStart: ${selectionStart}, selectionEnd: ${selectionEnd}文字`);
        })
    }
    .height('100%')
  }
  @Builder
  LongPressImageCustomMenu() {
    Column() {
      Menu() {
        MenuItemGroup() {
          MenuItem({ startIcon: $r('app.media.app_icon'), content: "Long Press Image Menu 1", labelInfo: "" })
            .onClick((event) => {
              this.controller.closeSelectionMenu();
            })
          MenuItem({ startIcon: $r('app.media.app_icon'), content: "Long Press Image Menu 2", labelInfo: "" })
          MenuItem({ startIcon: $r('app.media.app_icon'), content: "Long Press Image Menu 3", labelInfo: "" })
        }
      }
      .MenuStyles()
    }
  }
}
@Extend(Menu)
function MenuStyles() {
  .radius($r('sys.float.ohos_id_corner_radius_card'))
  .clip(true)
  .backgroundColor('#F0F0F0')
}

更多关于HarmonyOS 鸿蒙Next中,长按事件与点击事件冲突,如何区分长按和点击以正确响应?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,长按事件与点击事件的冲突通常可以通过事件的时间间隔和类型来区分。

鸿蒙系统提供了专门的事件处理机制来识别不同的用户交互。对于长按事件和点击事件,系统会根据事件的触发时间和持续时间来判定。具体来说,点击事件通常是短时间内的一次触摸并释放,而长按事件则是在触摸后持续一段时间(通常是几百毫秒到几秒)才触发。

在鸿蒙的开发框架中,你可以通过事件监听器来捕获这两种事件。当触摸事件发生时,首先判断是否为按下事件(ACTION_DOWN),然后启动一个计时器。如果在设定的长按时间内(例如500毫秒)没有接收到抬起事件(ACTION_UP),则视为长按事件;如果在计时器到期前接收到抬起事件,则视为点击事件。

此外,鸿蒙系统的事件对象通常会包含事件类型信息,你可以通过检查事件类型来直接区分长按和点击。

实现这一逻辑时,确保你的事件处理代码能够准确识别并响应这两种事件,避免误判。

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

回到顶部