爱车记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)