1.如何替换聊天的气泡 ?
替换资源图片中的 rc_ic_bubble_left_file.9.png 、rc_ic_bubble_right_file.9.png
2.自定义消息如何不显示头像,且居中?
自定义消息的展示模版MessageItemProvider设置如下ProviderTag即可:@ProviderTag(messageContent = XXXMessage.class, showPortrait = false, centerInHorizontal = true, showProgress = false, showSummaryWithName = false
showPortrait = false 表示不显示头像
centerInHorizontal = true 表示居中显示
showProgress = false 表示不显示发送进度
showSummaryWithName = false 表示 会话页面不在消息上面显示昵称
3.如何修改会话列表、会话页面的用户头像为圆形?
会话列表 :在 rc_item_conversation.xml 里给 rc_left 控件,设置 app:RCShape="circle" 属性,如下:
android:id="@+id/rc_left"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:background="@android:color/transparent"
app:RCCornerRadius="3dp"
app:RCDefDrawable="@drawable/rc_default_portrait"
app:RCShape="circle" />
会话页面:在 rc_item_message.xml 里给 rc_left 和 rc_right 控件设置 app:RCShape="circle" 属性
4.如何自定义会话列表的 adapter ?
1.自定义会话列表 adapter 继承自 ConversaitonListAdapter ,根据您的需求复写其中的 newView() 或者 bindView() 方法。
2.自定义会话列表 fragment 继承自 ConversationListFragment,复写 onResolveAdapter() 方法,返回自定义的 adapter。另外您的 activity 布局文件中也需要配置成自定义的 fragment。
5.如何自定义会话页面的 adapter ?
1.自定义会话页面 adapter 继承自 MessageListAdapter ,根据您的需求复写其中的 newView() 或者 bindView() 方法。
2.自定义会话页面 fragment 继承自 ConversationFragment,复写 onResolveAdapter() 方法,返回自定义的 adapter。另外您的 activity 布局文件中也需要配置成自定义的 fragment。
6.如何给会话列表设置头布局?
自定义 fragment 继承自 ConversationListFragment ,重写 onAddHeaderView 方法,返回要添加的头布局 view./**
* 会话列表添加头部
*
* @return 头部view
*/
protected List onAddHeaderView()
7.会话列表如何过滤(不显示)某个会话?
自定义 fragment 继承自 ConversationListFragment ,重写 shouldFilterConversation 方法。可根据 conversaitonType 和 targetId 来判断是否要过滤该会话,需要过滤 return true ,不需要过滤 return false 。/**
* 会话列表界面是否过滤某一会话,过滤之后,用户往该会话发送消息,也不会在会话列表展示
*
* @param type 会话类型
* @param targetId 会话的目标Id。根据不同的 conversationType,可能是用户 Id、讨论组 Id、群组 Id 或聊天室 Id。
* @return
*/
public boolean shouldFilterConversation(ConversationType type, String targetId)
8.如何填充自定义数据到会话列表页面?
自定义 fragment 继承自 ConversationListFragment ,重写 getConversaitonList 方法,通过 callback 返回要显示的数据,具体说明如下:/**
* 开发者可以重写此方法,来填充自定义数据到会话列表界面。
* 如果需要同时显示 sdk 中默认会话列表数据,在重写时可使用 super.getConversationList()。反之,不需要调用 super 方法。
*
* 注意:通过 callback 返回的数据要保证在 UI 线程返回。
*
* @param conversationTypes 当前会话列表已配置显示的会话类型。
*/
public void getConversationList(ConversationType[] conversationTypes, final IHistoryDataResultCallback> callback)
9.如何获取到会话列表的数据?
当直接修改布局文件和自定义 adapter 都无法满足您的需求,您可以通过 RongIM 提供的接口来获取会话列表的数据,然后完全自己来实现 UI ,这样可自定义的层度更高。接口说明如下.
回调的方式获取会话列表的所有数据:/**
* 获取会话列表。
*
* @param callback 会话列表数据回调。
* Conversation。
*/
public void getConversationList(RongIMClient.ResultCallback> callback)
回调的方式获取会话列表某几个类型的数据:/**
* 根据会话类型,回调方式获取会话列表。
*
* @param callback 获取会话列表的回调。
* @param types 会话类型。
*/
public void getConversationList(RongIMClient.ResultCallback> callback, Conversation.ConversationType... types) {
10.如何去掉会话页面的“文件 plugin ”?
文件 plugin 和 图片 plugin 是 SDK里默认自带的 plugin , 如果不需要,可以通过如下方式去掉:
自定义一个 ExtensionModule 继承自 DefaultExtensionModule,复写其中的 getPluginModules() 方法,remove掉类型为 FilePlugin 或 ImagePlugin 的插件,如下:public class MyExtensionModule extends DefaultExtensionModule {
@Override
public List getPluginModules(Conversation.ConversationType conversationType) {
List pluginModules = super.getPluginModules(conversationType);
Iterator it = pluginModules.iterator();
while (it.hasNext()) {
IPluginModule pluginModule = it.next();
if (pluginModule instanceof FilePlugin) {
it.remove();
}
}
return pluginModules;
}
}
11.想修改拓展区域的布局,在哪里修改?
部分布局文件如下,您可以通过修改对应的布局文件来调整界面布局,修改背景,更改字体等。
1、rc_ext_extension_bar.xml 输入框布局文件。它是整个输入框的容器,内部有对各部分组件功能描述。
2、rc_ext_input_edit_text.xml EditText 布局文件。如果想要替换背景,直接修改即可。
3、rc_ext_voice_input.xml 语音输入布局文件。
12.如何增加或删除会话页面中消息的长按菜单中的 item ?
调 RongMessageItemLongClickActionManager 的 addMessageItemLongClickAction 来添加长按菜单,如:RongMessageItemLongClickActionManager.getInstance().addMessageItemLongClickAction(clickActionReference, 2);
调 removeMessageItemLongClickAction 移除长按菜单:public void removeMessageItemLongClickAction(MessageItemLongClickAction action)