长按消息的弹窗菜单怎么添加、删除操作选项?

在聊天页面的消息上长按会弹出操作菜单,包括删除、复制等选项, 添加、删除这些操作选项的指南 (适用于IMKit4.x/5.x)
发布时间: 2019-08-15 15:17

回答:

操作选项被抽象为 MessageItemLongClickAction ,其中属性有显示名称 title、显示优先级(由上到下的顺序)priority、控制是否会被显示出来的过滤器 filter 以及被点击时的监听器 listener。

而对它的管理封装在 RongMessageItemLongClickActionManager 中,使用集合 messageItemLongClickActions 来装所有操作选项,并提供添加、删除、获取的接口:addMessageItemLongClickAction,removeMessageItemLongClickAction,getMessageItemLongClickActions

同时在初始化时,在方法 initCommonMessageItemLongClickActions 中已经添加了“复制消息”、“撤回消息”和“删除消息”三个操作选项

需要添加新的操作选项时,可以参考 initCommonMessageItemLongClickActions 中添加实现

需要删除已有操作选项时,先获取到要删除选项的对象,然后调删除接口 removeMessageItemLongClickAction

去除默认已经添加的“删除消息”选项示例:

List<MessageItemLongClickAction> clickActions = RongMessageItemLongClickActionManager
        .getInstance().getMessageItemLongClickActions();
Iterator<MessageItemLongClickAction> iterator = clickActions.iterator();
String delActionTitle = getString(R.string.rc_dialog_item_message_delete);
while (iterator.hasNext()) {
    MessageItemLongClickAction clickAction = iterator.next();
    boolean isDelAction = delActionTitle.equals(clickAction.getTitle(this));
    if (isDelAction) {
        iterator.remove();
        break;
    }
}

注意:这些操作要在 IM 的 init 之后设置,且保证在主进程中执行