写点什么

在融云 IMkit 会话界面基础上添加消息已读未读

发布于: 2021 年 03 月 15 日

使用过融云的同学们可能知道. 融云 IMkit 的会话界面, 发送完消息后, 如果对方已读, 发送端则会显示小对号的图片. 但是更具需求要把小对号改为已读未读. 接下来我们就一块实现这个功能.


打开回执功能


首先, 要确定打开融云的消息回执功能. 这个很简单, 就是在 rc_config.xml 中把下面属性配置为 true 即可.


复制代码


<!-- 设置是否开启消息回执, true 为打开, false 为关闭-->
复制代码


<bool name="rc_read_receipt">true</bool>
复制代码


复制代码

这样发送消息后, 对方已读, 发送端就会出现融云默认的小对号了.


自定义 Adapter


出现小对号后, 下一步就是要进行对融云适配器的改造了.


第一步创建 CustomMessageListAdapter 继承 MessageListAdapter. 根据自己的需求复写 newView() 或者 bindView() 方法.


class CustomMessageListAdapter extends MessageListAdapter {
复制代码


复制代码


    @Override
复制代码


    protected void bindView(View v, final int position, final UIMessage data) {
复制代码


        // 此方法中操作控件
复制代码


    }
复制代码


}
复制代码


    
复制代码

第二步


创建 CustomConversationFragment 继承于 ConversationFragment, 并复写父类中的 onResolveAdapter(), 返回 CustomMessageListAdapter 对象.


 class CustomMessageListAdapter extends ConversationFragment {
复制代码


        @Override
复制代码


        public MessageListAdapter onResolveAdapter() {
复制代码


            return new CustomMessageListAdapter();
复制代码


        }
复制代码


    }
复制代码


复制代码

第三步


使用 CustomConversationListFragment 代替 ConversationListFragment 进行配置使用即可.


添加已读未读


自定了了 Adapter, 我们就可以在原先逻辑的基础上进行扩展了. 现在主要的任务就是找到小对号的控件.


我们先看一下默认的 item 布局 rc_item_message.xml. 在布局中我们可找到下面的控件


复制代码


    <TextView
复制代码


        android:id="@id/rc_read_receipt"
复制代码


        android:layout_width="wrap_content"
复制代码


        android:layout_height="wrap_content"
复制代码


        android:layout_gravity="bottom"
复制代码


        android:layout_marginRight="4dp"
复制代码


        android:drawableLeft="@drawable/rc_read_receipt"
复制代码


        android:drawableStart="@drawable/rc_read_receipt"
复制代码


        android:textColor="@color/rc_read_receipt_status"
复制代码


        android:textSize="12sp"
复制代码


        android:visibility="gone" />
复制代码


复制代码

这个就是显示对号的控件了. 是一个 TextView 的控件, 由于我们是添加 “已读” 、“未读” 字符串, 正好可以直接使用这个 TextView 控件.


我们通过控件的 id 在 Adapter 中找到控件的名称.


class CustomMessageListAdapter extends MessageListAdapter {
复制代码


复制代码


    @Override
复制代码


    protected void bindView(View v, final int position, final UIMessage data) {
复制代码


         super(v, position, data);
复制代码


       // 此方法中操作控件
复制代码


       final ViewHolder holder = (ViewHolder) v.getTag();
复制代码


       if (data.getMessageDirection() == Message.MessageDirection.SEND) {
复制代码


            if (readRec && data.getSentStatus() == Message.SentStatus.READ) {
复制代码


                if (data.getConversationType().equals(Conversation.ConversationType.PRIVATE) && tag.showReadState()) {
复制代码


                    holder.readReceipt.setVisibility(View.VISIBLE);
复制代码


                    holder.readReceipt.setText(已读);
复制代码


                    holder.readReceipt.setBackground(null);
复制代码


                } else {
复制代码


                      holder.readReceipt.setText(未读);
复制代码


                      holder.readReceipt.setBackground(null);
复制代码


                      holder.readReceipt.setVisibility(View.VISIBLE);
复制代码


            }
复制代码


        }
复制代码


复制代码


    }
复制代码


}
复制代码


    
复制代码

这样就会显示就会显示已读未读的字样了.


用户头像

还未添加个人签名 2021.01.26 加入

还未添加个人简介

评论

发布
暂无评论
在融云 IMkit 会话界面基础上添加消息已读未读