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
开始搜索
- 继承
推送集成