本文仅适用于 IMKit SDK 4.X 版本。
这里以 Private 类型的会话为例:
1.在原有布局基础上改变控件位置
Private 类型的会话列表显示对应的类为 PrivateConversationProvider,对应的布局文件为 rc_item_base_conversation.xml,可以在 IMKit Module 下找到,如果想修改 Private 会话列表 Item 样式,可直接修改该布局文件。另可参考:https://doc.rongcloud.cn/im/Android/4.X/ui/guide/list/custom/android
2.在原有布局基础上添加自定义布局
-
新建资源文件 item_private_conversation_provider_custom.xml,复制 rc_item_base_conversation.xml 文件中的布局代码至新建文件中,然后添加自己的布局(注意不要删除原有布局),比如增加了一个 id 为 custom 的自定义布局。
-
新建一个类继承 PrivateConversationProvider
@ConversationProviderTag(conversationType = "private", portraitPosition = 2) public class CustomPrivateConversationProvider extends PrivateConversationProvider { @Override public View newView(Context context, ViewGroup viewGroup) { // 此处更换为自定义布局文件 View result = LayoutInflater.from(context).inflate(R.layout.item_private_conversation_provider, (ViewGroup)null); // 使用自定义 ViewHolder ViewHolder holder = new ViewHolder(); // ===> 此部分内容直接复制即可 holder.title = (TextView)result.findViewById(io.rong.imkit.R.id.rc_conversation_title); holder.time = (TextView)result.findViewById(io.rong.imkit.R.id.rc_conversation_time); holder.content = (TextView)result.findViewById(io.rong.imkit.R.id.rc_conversation_content); holder.notificationBlockImage = (ImageView)result.findViewById(io.rong.imkit.R.id.rc_conversation_msg_block); holder.readStatus = (ImageView)result.findViewById(io.rong.imkit.R.id.rc_conversation_status); // <===| // 获取自定义 View holder.customView = result.findViewById(R.id.custom); result.setTag(holder); return result; } @Override public void bindView(View view, int position, UIConversation data) { super.bindView(view, position, data); } @Override public Spannable getSummary(UIConversation data) { return super.getSummary(data); } @Override public String getTitle(String userId) { return super.getTitle(userId); } @Override public Uri getPortraitUri(String userId) { return super.getPortraitUri(userId); } // 自定义 ViewHolder,可添加自定义布局控件 class ViewHolder extends PrivateConversationProvider.ViewHolder { View customView; } }
-
在 Application 的 onCreate 方法中注册
RongIM.getInstance().registerConversationTemplate(new CustomPrivateConversationProvider());
-
如果想在点击会话列表中此类型会话 Item 时执行一些操作(自定义布局可以通过 View.findViewById() 来获取)可以设置监听事件:
RongIM.setConversationListBehaviorListener(new RongIM.ConversationListBehaviorListener() { @Override public boolean onConversationPortraitClick(Context context, Conversation.ConversationType conversationType, String s) { return false; } @Override public boolean onConversationPortraitLongClick(Context context, Conversation.ConversationType conversationType, String s) { return false; } @Override public boolean onConversationLongClick(Context context, View view, UIConversation uiConversation) { return false; } @Override public boolean onConversationClick(Context context, View view, UIConversation uiConversation) { return false; } });
IMKit SDK 5.x 可直接参考开发者文档:https://doc.rongcloud.cn/im/Android/5.X/ui/conversationlist/custom-style