鸿蒙开发融云demo长按消息
融云鸿蒙版是不带UI的,得自己一步步搭建。 这次讲如何长按消息,出现选择菜单。 这没什么难度。
一、思路:
用bindContextMenu
二、效果图:
三、关键代码:
@Builder
MessageContextMenuBuilder() {
Menu() {
ForEach(this.messageContextMenus(), (menuItem: MessageContextMenuItem) => {
MenuItem({ content: menuItem.title })
.onClick(menuItem.action)
}, (menuItem: MessageContextMenuItem) => menuItem.title)
}
}
// 长按消息的菜单
messageContextMenus = () => {
let menus: MessageContextMenuItem[] = [
{
title: '复制',
tag: 'copy',
action: () => {
let pasteData: pasteboard.PasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, (this.msg.content as TextMessage).content)
let systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard();
systemPasteboard.setData(pasteData)
},
filter: () => {
return this.msg.objectName === TextMessageObjectName
}
},
{
title: '删除',
tag: 'delete',
action: () => {
// android是本地和远端消息都删除的
let conId = new ConversationIdentifier();
conId.conversationType = this.msg.conversationType;
conId.targetId = this.msg.targetId;
let msgList = new AList<Message>();
msgList.add(this.msg);
IMEngine.getInstance().deleteRemoteMessages(conId, msgList, true).then(result => {
if (EngineError.Success !== result.code) {
// 删除远端消息失败
return;
}
// 删除远端消息成功
this.delCallback?.(this.index)
})
}
},
{
// android也没有撤回功能,先不做
title: '撤回',
tag: 'recall',
action: () => {
},
filter: ()=>{
return false
}
},
]
// do filter
return menus.filter(item =>!item.filter || item.filter())
}
在你要长按的组件上加上
.bindContextMenu(this.MessageContextMenuBuilder, ResponseType.LongPress)
整个鸿蒙融云Demo源码结构图:
有问题或者需要完整源码demo的可以看简介联系我,也可以私信我,我每天都看私信的