TUIKit 已经在内部完成了基本消息的渲染工作,您可以很简单地通过属性设置来调节消息展示样式,也可以重新自定义消息样式。
TUIKit 基本消息类型请参见 MessageInfo.java。
消息类型 | 显示效果图 |
---|---|
文本类消息 | |
图片类消息 | |
语音类消息 | |
视频类消息 | |
文件类消息 |
如果基本消息类型不能满足您的需求,您可以根据实际业务需求自定义消息。
本文以发送一条可跳转至浏览器的超文本作为自定义消息为例,帮助您快速了解实现流程。
MessageInfoUtil 类可以帮助您实现各种消息类型,包括自定义消息,例如用 JSON 串来创建一条消息:
MessageInfo info = MessageInfoUtil.buildCustomMessage("{\"text\": \"欢迎加入即时通信 IM 大家庭!查看详情>>\",\"url\": \"https://cloud.tencent.com/product/im"}");
您可以通过 ChatLayout 的实例发送自定义消息:
chatLayout.sendMessage(info)
自定义消息的定义、解析与展示完全由您根据实际业务需求实现,通过 TUIKit 透传发送到对方,TUIKit 在渲染这条消息时也会调用您实现的回调,您的回调一般包括以下流程:
渲染自定义消息的流程如下图所示:
TUIKit 会在内部通过消息的类型获知该条消息是自定义消息,渲染到该条消息时会通过回调通知您,并调用您的布局以及实现逻辑,所以您只需将实现了IOnCustomMessageDrawListener
的监听传入到 TUIKit 即可。
// 设置自定义的消息渲染时的回调
messageLayout.setOnCustomMessageDrawListener(new CustomMessageDraw());
下列示例代码将呈现一个完整的自定义消息解析的过程,您也可以直接 下载 完整的 Demo。
public class CustomMessageDraw implements IOnCustomMessageDrawListener {
/**
* 自定义消息渲染时,会调用该方法,本方法实现了自定义消息的创建,以及交互逻辑
*
* @param parent 自定义消息显示的父View,需要把创建的自定义消息view添加到parent里
* @param info 消息的具体信息
*/
@Override
public void onDraw(ICustomMessageViewGroup parent, MessageInfo info) {
// 获取到自定义消息的json数据
if (info.getTimMessage().getElemType() != V2TIMMessage.V2TIM_ELEM_TYPE_CUSTOM) {
return;
}
V2TIMCustomElem elem = info.getTimMessage().getCustomElem();
// 自定义的json数据,需要解析成bean实例
CustomHelloMessage data = null;
try {
data = new Gson().fromJson(new String(elem.getData()), CustomHelloMessage.class);
} catch (Exception e) {
DemoLog.w(TAG, "invalid json: " + new String(elem.getData()) + " " + e.getMessage());
}
if (data == null) {
DemoLog.e(TAG, "No Custom Data: " + new String(elem.getData()));
} else if (data.version == TUIKitConstants.JSON_VERSION_1
|| (data.version == TUIKitConstants.JSON_VERSION_4 && data.businessID.equals("text_link"))) {
CustomHelloTIMUIController.onDraw(parent, data);
} else {
DemoLog.w(TAG, "unsupported version: " + data);
}
}
}
显示效果如下图所示:
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
本文介绍如何设置样式(iOS) 说明: 更多实操教学视频请参见:设置样式(iOS)...
美国前邮政部长,美国百货商店之父,约翰华纳梅克(John Wanamaker)感叹到:「我...
操作场景 默认情况下,Kube-proxy 使用 iptables 来实现 Service 到 Pod 之间的...
调用ModifyDiskChargeType修改1台ECS实例上挂载的1块或最多16块云盘的计费方式。...
随着人们生活方式的加快,网络时代中 建站 成为企业宣传产品最快的方式,除了速...
1. 接口描述 接口请求域名: cdn.tencentcloudapi.com 。 CreateClsLogTopic 用...
SUSE收购Rancher Pure Storage收购Portworx Veeam收购Kasten VMware收购Octarine...
哪里的 域名注册 便宜? 域名 注册的价格,除了与注册的域名后缀有关,还与选择...
操作场景 容器服务 TKE 支持通过在控制台使用 授权管理 功能管理子账号的常用授...