自定义长按消息菜单
用户在会话页面长按消息可打开弹窗,根据当前消息类型、会话类型提供不同选项。您可以在自定义菜单选项的显示名称、顺序、以及自行增删菜单选项。
自定义长按消息弹窗的菜单选项
-
监听会话页面的长按消息事件(
onMessageLongClick
)。IMCenter.setConversationClickListener(
new ConversationClickListener() {
@Override
public boolean onUserPortraitClick(
Context context,
Conversation.ConversationType conversationType,
UserInfo user,
String targetId) {
return false;
}
@Override
public boolean onUserPortraitLongClick(
Context context,
Conversation.ConversationType conversationType,
UserInfo user,
String targetId) {
return false;
}
@Override
public boolean onMessageClick(
Context context, View view, Message message) {
return false;
}
@Override
public boolean onMessageLongClick(
Context context, View view, Message message) {
return false;
}
@Override
public boolean onMessageLinkClick(
Context context, String link, Message message) {
return false;
}
@Override
public boolean onReadReceiptStateClick(
Context context, Message message) {
return false;
}
}); -
通过
MessageItemLongClickActionManager
修改会话页面中的长按消息的操作选项(MessageItemLongClickAction
)。您可以自行增删菜单选项。长按消息的操作选项,或调整菜单选项的显示名称、顺序。-
MessageItemLongClickActionManager
在初始化方法initCommonMessageItemLongClickActions
中添加了部分操作选项。您可以使用addMessageItemLongClickAction
添加选项。可参考 IMKit 源码中的 MessageItemLongClickActionManager.java。 -
如需删除已有选项时,需先获取到要删除选项的对象,然后调删除接口
removeMessageItemLongClickAction
。以去除默认已经添加的「删除消息」选项为例:List<MessageItemLongClickAction> clickActions = MessageItemLongClickActionManager
.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;
}
}
MessageItemLongClickAction
类属性如下表所示。属性 类型 描述 title String 显示名称。 listener MessageItemLongClickListener 长按消息监听器。 priority int 优先级越高,排在越前面(由上到下的顺序)。默认全是 0
,按添加顺序排列。filter Filter 控制是否会被显示出来的过滤器。 -
自定义消息多选操作菜单
在长按消息弹窗的菜单选项选择更多后,SDK 进入消息多选模式,多选模式下默认提供了转发和删除按钮。您可以增删已有按钮、添加自定义按钮。
-
实现
IClickActions
接口。public class CustomClickActions implements IClickActions {
/**
* 获取点击按钮的图标
*
* @param context 上下文
* @return 图片的Drawable, 如需高亮或者置灰,则返回类型为selector, 分别显示enable或者disable状态下的drawable
*/
@Override
public Drawable obtainDrawable(Context context) {
return null;
}
/**
* 图标按钮点击事件
*
* @param curFragment 当前 Fragment, 请注意不要持有该 fragment, 否则容易引起内存泄露。
*/
@Override
public void onClick(Fragment curFragment) {
}
/**
* 是否过滤。可以根据业务场景,设置某些会话下过滤掉此按钮,即不进行显示。
* @param message 消息
* @return 返回true,表示过滤掉,页面上不显示此 item。
*/
@Override
public boolean filter(UiMessage message) {
return false;
}
} -
将自定义按钮配置到 SDK 中。
RongConfigCenter.conversationConfig().addMoreClickAction(0, new CustomClickAction());
-
根据业务需要,彻底移除某内置按钮。以下示例以移除转发按钮为例。
List<IClickActions> clickActions = RongConfigCenter.conversationConfig().getMoreClickActions();
List<IClickActions> removeActions = new ArrayList<>();
for (IClickActions action : clickActions){
if (action instanceof ForwardClickActions){
RongConfigCenter.conversationConfig().removeMoreClickAction(action);
}
}提示移除“转发”按钮仅在 IMKit 合并转发功能关闭的情况下生效。