乐趣区

关于程序员:在融云-IMkit-会话界面基础上添加消息已读未读

应用过融云的同学们可能晓得. 融云 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);
}
}

}
}

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

退出移动版