Harmony OS Next实现长按复制内容

Laughing
2025-01-26 / 0 评论 / 112 阅读 / 搜一下 / 正在检测是否收录...

m6cz2ex1.png

爱车记App有个查询附近充电站的功能,为了方便使用在其他导航使用(我们默认使用的是华为的花瓣地图,因为花瓣地图POI查询不支持电价,比较不方便),我们支持在充电站列表界面长按复制充电站名称,所以我们介绍一下,在Harmony OS Next中实现长按复制文本的功能。

封装公共复制方法

为了方便不同地方使用,我们增加一个复制的公共方法。

/**
 * 复制
 * @param text 复制的文本
 */
export function copyText(text: string) {
  const pasteboardData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, text);
  const systemPasteboard = pasteboard.getSystemPasteboard();
  systemPasteboard.setData(pasteboardData); // 将数据放入剪切板
  IBestToast.show({ message: getStringFromResource($r("app.string.copy_success")) });
}

实现长按复制

ListItem() {
      if (this.renderItem) {
        this.renderItem(nearbyChargeStation, index)
      }
    }
    .onClick(() => {
      this.naviChargeState(nearbyChargeStation)
    })
    .swipeAction({
      end: () => {
        this.swiperAction(nearbyChargeStation, index)
      }
    })
    .borderRadius(8)
    .backgroundColor($r("app.color.white"))
    .gesture(
      LongPressGesture({ repeat: false, fingers: 1 })
        .onAction((event: GestureEvent) => {
          if (event) {
            copyText(nearbyChargeStation.name)
          }
        })
        .onActionEnd((event: GestureEvent) => {

        })
    )

我们重点关注

.gesture(
  LongPressGesture({ repeat: false, fingers: 1 })
    .onAction((event: GestureEvent) => {
      if (event) {
        copyText(nearbyChargeStation.name)
      }
    })
    .onActionEnd((event: GestureEvent) => {

    })
   )

LongPressGesture代表长按手势:

参数repeat代表是否重复触发,因为我们只是复制一次,因此设置false

fingers代表手指个数,取值范围是[1,10],我们这里只需要一个手指即可,因此设置1

onAction是触发事件,我们调用封装的公共copyText方法。

onActionEnd是结束触发事件,如果有其他操作,比如清理资源啥的,可以在这个事件中处理。

0

评论 (0)

取消