1. ChatUIKit简介
为了方便快速二次开发,和快速集成,我们提供了ChatUIKit,ChatUIKit提供了大量可重用的UI组件。
ChatUIKit依赖于ChatClient。当ChatClient调用connect后(调用connect就直接打开了数据库,不用等待成功连上),ChatUIKit就可以使用。
ChatUIKit包含以下页面:
- 会话列表界面
- 消息列表界面
- 输入框的处理
- 好友界面
- 好友请求处理界面
- 会话设置界面
- 个人信息界面
- 群组信息界面
- 频道信息界面
- 音视频通话界面
消息类型的支持:
- 文本
- 图片
- 语音
- 视频
- 文件
- 动态表情
- 输入状态
- 地理位置
- 通知消息
- 自定义消息,可以自己添加任意类型消息
2. 开发
自定义消息
- 继承
MessageContent,并添加ContentTag注解,用于标识消息类型和消息存储类型。自定义消息类型要求大于1000。消息类型,参考MessageContentType;消息存储类型,参考PersistFlag。一定保证自定义消息类,包含一个无参构造函数!!!
- 调用
ChatManager#registerMessageContent注册新消息类型,或者直接修改ClientService#onCreate进行消息注册
- 继承
自定义消息UI
根据消息类型,继承相应的基类,并添加
MessageContentType和LayoutRes注解,参考TextMessageContentViewHolder普通消息,靠边显示,显示发送者。
继承
NormalMessageContentViewHolder,并添加相应注解,通知消息,居中显示,不显示消息发送者。
简单/小灰条通知,界面只显示一个小灰条
自定义通知类消息后,将其加入到
SimpleNotificationMessageContentViewHolder的MessageContentType里面即可复杂通知,支持定义UI,显示比较复杂的界面
继承
NotificationMessageContentViewHolder,实现相关方法,并添加对应的MessageContent和布局注解,请参考ExampleRichNotificationMessageContentViewHolder
响应用户动作
单击
用
@OnClick注解单击的响应方法,用法和butterknife一致。参考ExampleRichNotificationMessageContentViewHolder#onClick,支持点击消息的不同UI作出不同的响应。长按
用
@MessageContextMenuItem注解长按响应方法,当有多个长按响应时,会弹出选择对话框,让用户选择选择目标响应,可参考ExampleRichNotificationMessageContentViewHolder#forwardMessage。另外,支持根据不同的消息、会话,过滤长按菜单选项,可参考ExampleRichNotificationMessageContentViewHolder#contextMenuItemFilter双击,目前尚未支持
注册自定义消息UI
调用
MessageViewHolderManager#registerMessageViewHolder注册新的消息UI,或者直接修改MessageViewHolderManager#init进行注册。
自定义会话类型
野火通根据会话类型和会话线路唯一标识一种会话类型,故可以采用相应会话类型(单聊、群里等)组合不同会话线路实现自定义会话
继承
ConversationViewHolder自定义会话类型UI,添加ConversationInfoType和@EnableContextMenu注解,其中@EnableContextMenu可选,表示是否允许长按操作。注册定义会话类型UI
调动
ConversationViewHolderManager#registerConversationViewHolder,或者直接修改ConversationViewHolderManager进行自定义会话类型UI的注册。
自定义会话扩展
会话扩展指的是:会话界面,点击+号,弹出的那些快捷功能。
自定义扩展
继承
ConversationExt,并实现设置icon等相关方法,用ExtContextMenuItem注解需要响应点击的方法,当有多个时,会弹出选择对话框。如果需要使用startActivityForResult方法,需用ConversationExt#startActivityForResult,以保证正确回调onActivityResult,可参考FileExt如果需要实现类似微信语音输入的扩展,可参考
ExampleAudioInputExt注册扩展
调用
ConversationExtManager#registerExt,或直接修改ConversationExtManager#init进行扩展注册。
自定义会话列表状态通知
- 继承
StatusNotification,并实现其方法, - 调用
ConversationListFragment#showNotification显示通知,调用ConversationListFragment#clearNotification清除通知。
- 继承
修改会话列表长按菜单
参考
ConversationViewHolder#removeConversation和ConversationViewHolder#contextMenuItemFilter自定义搜索
- 继承
SearchableModule,并实现其方法,参考GroupSearchViewModule - 参考
SearchPortalActivity#initSearchModule配置当前想进行的搜索项,参考SearchPortalActivity#search开始搜索
- 继承
推送集成