HarmonyOS 鸿蒙Next Text组件实现了bindSelectionMenu并设置手势为TextResponseType.LONG_PRESS,长按会出现自定义菜单,但是双击手势依然会出现默认菜单,怎么解决?

HarmonyOS 鸿蒙Next Text组件实现了bindSelectionMenu并设置手势为TextResponseType.LONG_PRESS,长按会出现自定义菜单,但是双击手势依然会出现默认菜单,怎么解决? Text组件实现了bindSelectionMenu并设置手势为TextResponseType.LONG_PRESS,长按会出现自定义菜单,但是双击手势依然会出现默认菜单,怎么解决?

2 回复

双击手势出现默认菜单为默认规格; 有规避方案 可以在text下直接添加

.<function_>(parallelGesture)(
  .class_(TapGesture)({count:2})
    .onAction(() => {
      this.controller.closeSelectionMenu();
      console.info('双击手势');
    }), .class_(GestureMask).Normal)

更多关于HarmonyOS 鸿蒙Next Text组件实现了bindSelectionMenu并设置手势为TextResponseType.LONG_PRESS,长按会出现自定义菜单,但是双击手势依然会出现默认菜单,怎么解决?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,Text组件通过bindSelectionMenu方法并设置手势为TextResponseType.LONG_PRESS,可以实现在长按手势时触发自定义菜单。然而,即使设置了长按手势,双击手势仍然会触发默认菜单。这是因为Text组件默认支持双击手势,并且双击手势的优先级高于长按手势。

要解决这个问题,可以通过覆盖Text组件的双击事件处理逻辑,阻止默认菜单的显示。具体步骤如下:

  1. 使用onDoubleClick事件监听器来捕获双击事件。
  2. onDoubleClick事件处理函数中,调用event.stopPropagation()方法阻止事件继续传播,从而阻止默认菜单的显示。

以下是示例代码:

import { Text, TextResponseType } from '@ohos.agp.components';

let text = new Text(context);
text.bindSelectionMenu(() => {
  // 自定义菜单逻辑
}, TextResponseType.LONG_PRESS);

text.onDoubleClick((event) => {
  event.stopPropagation();
  // 自定义双击逻辑
});

通过这种方式,你可以确保双击手势不会触发默认菜单,同时长按手势仍然可以触发自定义菜单。

回到顶部