文档导航
Android
SDK 版本:  5.X
公告:融云新文档中心已上线,欢迎到新文档中心阅读 Android IMLibAndroid IMKit 的文档。

自定义长按消息菜单

更新时间:2024-02-06 PDF

自定义长按消息菜单

用户在会话页面长按消息可打开弹窗,根据当前消息类型、会话类型提供不同选项。您可以在自定义菜单选项的显示名称、顺序、以及自行增删菜单选项。

自定义长按消息弹窗的菜单选项

  1. 监听会话页面的长按消息事件(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;
            }
        });
                  
    已复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44

  2. 通过 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;
          }
      }
                    
      已复制
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12

    MessageItemLongClickAction 类属性如下表所示。

    属性 类型 描述
    title String 显示名称。
    listener MessageItemLongClickListener 长按消息监听器。
    priority int 优先级越高,排在越前面(由上到下的顺序)。默认全是 0,按添加顺序排列。
    filter Filter 控制是否会被显示出来的过滤器。

自定义消息多选操作菜单

在长按消息弹窗的菜单选项选择更多后,SDK 进入消息多选模式,多选模式下默认提供了转发和删除按钮。您可以增删已有按钮、添加自定义按钮。

  1. 实现 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;
        }
    }
                  
    已复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30

  2. 将自定义按钮配置到 SDK 中。

    RongConfigCenter.conversationConfig().addMoreClickAction(0, new CustomClickAction());
                  
    已复制
    1

  3. 根据业务需要,彻底移除某内置按钮。以下示例以移除转发按钮为例。

    List<IClickActions> clickActions = RongConfigCenter.conversationConfig().getMoreClickActions();
    List<IClickActions> removeActions = new ArrayList<>();
    for (IClickActions action : clickActions){
        if (action instanceof ForwardClickActions){
            RongConfigCenter.conversationConfig().removeMoreClickAction(action);
        }
    }
                  
    已复制
    1
    2
    3
    4
    5
    6
    7

    提示

    移除“转发”按钮仅在 IMKit 合并转发功能关闭的情况下生效。

自行控制多选状态

您可以自行控制多选状态,或获取多选状态下的数据。

进入多选状态:

MessageViewModel messageViewModel = ViewModelProviders.of(fragment).get(MessageViewModel.class);
messageViewModel.enterEditState();
              
已复制
1
2

关闭多选状态:

MessageViewModel messageViewModel = ViewModelProviders.of(fragment).get(MessageViewModel.class);
messageViewModel.quitEditMode();
              
已复制
1
2

获取选中的信息:

MessageViewModel messageViewModel = ViewModelProviders.of(fragment).get(MessageViewModel.class);
List<UiMessage> selectedMessages = messageViewModel.getSelectedUiMessages();
              
已复制
1
2

监听多选状态变化

通过 MessageViewModel 获取多选状态的 LiveData, 可以监听多选状态的变化。

MessageViewModel messageViewModel = ViewModelProviders.of(fragment).get(MessageViewModel.class);
messageViewModel.getEditStatusLiveData().observe(this, new Observer<Boolean>() {
  @Override
  public void onChanged(Boolean aBoolean) {
    //根据业务需要,进行 UI 更新。
  }
});
              
已复制
1
2
3
4
5
6
7

文档反馈
意见反馈

您的改进建议

意见反馈

问题类型

联系我们

提交工单

技术支持|集成使用|产品方案


商务咨询

7 x 24 小时

为您解答方案与报价问题

131 6185 6839

文档反馈