Android

TUIKit已经在内部完成了基本消息的渲染工作,您可以很简单地通过属性设置来调节消息展示样式,也可以完全地自定义消息样式

1、基本消息类型

TUIKit 消息API类型请参见:MessageInfo.java

2、基本属性设置

参考:修改界面样式

3、自定义消息

很多情况下我们需要更多类型的消息,比如图文混排等富媒体格式,此时您仅需要实现自己富媒体消息的布局与交互逻辑并传入到TUIKit,TUIKit会完成这些渲染刷新工作

抽象为TUIKit内部,为下图的自定义消息部分:

TUIKit内部实现了自定义消息的创建、发送与渲染,下面以发送一条可跳转到浏览器的超文本作为自定义消息,来帮助您快速实现自己的业务逻辑

3.1 创建一条自定义消息

MessageInfoUtil类可以帮助您实现各种消息类型,包括自定义消息,比如用json串来创建一条消息:

MessageInfo info = MessageInfoUtil.buildCustomMessage("{\"text\": \"这是一个带链接的测试消息,可点击查看\",\"url\": \"https://cloud.tencent.com\"}");

3.2 发送一条自定义消息

可以通过ChatLayout的实例发送出去,这样对方就能收到一条自定义消息

chatLayout.sendMessage(info)

3.3 渲染自定义消息

自定义消息的定义、解析与展示完全是由您自己根据业务实现,通过TUIKit透传发送到对方,TUIKit在渲染这条消息时也会调用您实现的回调,您的回调一般包括以下内容:

a、解析自定义消息

b、根据a的解析结果创建显示的View

c、把b的View添加到TUIKit的父容器里

d、实现b的View的交互逻辑

流程如下所示:

TUIKit会在内部通过消息的类型获知该条消息是自定义消息,渲染到该条消息时会通过回调通知您,并调用您的布局以及实现逻辑,所以您只需将实现了IOnCustomMessageDrawListener的监听传入到TUIKit即可。

// 设置自定义的消息渲染时的回调

messageLayout.setOnCustomMessageDrawListener(new CustomMessageDraw());

CustomMessageDraw实现了IOnCustomMessageDrawListener,并且在onDraw里完成了自定义消息的解析,view的创建,下面给出一个完整的CustomMessageDraw实现:

public static class CustomMessageDraw implements IOnCustomMessageDrawListener {

/**

* 自定义消息渲染时,会调用该方法,本方法实现了自定义消息的创建,以及交互逻辑

* @param parent 自定义消息显示的父View,需要把创建的自定义消息view添加到parent里

* @param info 消息的具体信息

*/

@Override

public void onDraw(ICustomMessageViewGroup parent, MessageInfo info) {

View view = null;

// 获取到自定义消息的json数据

TIMCustomElem elem = (TIMCustomElem) info.getTIMMessage().getElement(0);

// 自定义的json数据,需要解析成bean实例

final CustomMessageData customMessageData = new Gson().fromJson(new String(elem.getData()), CustomMessageData.class);

// 通过类型来创建不同的自定义消息展示view

switch(customMessageData.type) {

case CustomMessageData.TYPE_HYPERLINK:

view = LayoutInflater.from(DemoApplication.instance()).inflate(R.layout.test_custom_message_layout1, null, false);

// 把自定义消息view添加到TUIKit内部的父容器里

parent.addMessageContentView(view);

break;

case CustomMessageData.TYPE_PUSH_TEXT_VIDEO:

view = LayoutInflater.from(DemoApplication.instance()).inflate(R.layout.test_custom_message_layout2, null, false);

// 把自定义消息view添加到TUIKit内部的父容器里

parent.addMessageItemView(view);

break;

}

// 自定义消息view的实现,这里仅仅展示文本信息,并且实现超链接跳转

TextView textView = view.findViewById(R.id.test_custom_message_tv);

textView.setText(customMessageData.text);

textView.setClickable(true);

textView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

intent.setAction("android.intent.action.VIEW");

Uri content_url = Uri.parse(customMessageData.url);

intent.setData(content_url);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

DemoApplication.instance().startActivity(intent);

}

});

}

}

/**

* 自定义消息的bean实体,用来与json的相互转化

*/

public static class CustomMessageData {

// 超文本类型,点击可以跳转到一个webview

final static int TYPE_HYPERLINK = 1;

// 视频+说明类型

final static int TYPE_PUSH_TEXT_VIDEO = 2;

// 自定义消息类型,根据业务可能会有很多种

int type = TYPE_HYPERLINK;

String text = "这是一个测试消息,可点击查看";

String url = "https://cloud.tencent.com/document/product/269";

}

android 自定义消息,TUIKit Android自定义消息相关推荐

  1. Android基于环信自定义消息实现转账红包(一)

    最近做了一个项目,需要实现转账红包功能.我这里接入的是环信,我自己做的过程中也比较坎坷,所以想把实现的方法整理了一下分享给大家(如果大家有更好的实现方法,欢迎评论区留言,废话不多说了开始上货,东西有点 ...

  2. android layout组件,Android UI学习 - Linear Layout, RelativeLayout

    1.一些常用的公共属性介绍 1) layout_width -宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px值来设置宽 2) lay ...

  3. android:layout_gravity 和 android:gravity 的区别

    gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:layout_gravity 和 android:gravity 的区别 从名字上可以看到,android:gr ...

  4. Android横向伸缩,Android 实现伸缩布局效果示例代码

    最近项目实现下面的图示的效果,本来想用listview+gridview实现,但是貌似挺麻烦的于是就用flowlayout 来addview实现添加伸缩的效果,实现也比较简单. mainActivit ...

  5. android ble 设备扫描程序,Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备...

    本文将带你了解Android应用开发Android 7.0  BLE scan 问题:程序无错但扫描不到BLE设备,希望本文对大家学Android有所帮助. < 最近在做毕设,需要几周内从头学起 ...

  6. android window 大小,android popupWindow 中宽度莫名很大,求帮助?

    这个是popupwindow的内容xml(就是放了个ListView): android:layout_width="wrap_content" android:layout_he ...

  7. android radiobutton 分组,Android 第十课——UI RadioButton

    常用基础空组件 5 RadioGroup RadioButton 单选按钮时常用组件之一,但是开发过程中虽然很多地方会用到单选按钮,但是却不会用Android系统提供的原始样式,类似我们在写html时 ...

  8. android单线字体,Android自定义字体

    在main文件夹下,新建assets/fonts文件,添加.otf文件 image.png 字体工具类 import android.app.Application; import android.g ...

  9. mp4 android自动播放,Android 使用VideoView播放MP4的简单实现

    使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...

  10. android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...

    我收到这个错误, "Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' ...

最新文章

  1. 二、前端开发-HTML
  2. 关于jQuery.click()函数
  3. python现在时间 命令,Python 日期格式和时间以及当前时间和时间戳
  4. 什么是索引?索引类型有几种,各有什么特点?
  5. 【全栈React】第13天: 重复元素
  6. Lucene 与 Elastic
  7. 使用SQL Server事务复制将SQL Server数据库迁移到Azure SQL数据库
  8. 千寻位置 开发demo_CICV2019:博世相对高精度定位与千寻绝对高精度定位
  9. Docker CPU 资源限制——CPU分片功能测试
  10. 【编译打包】nginx-1.4.7-1.el6.lite.src.rpm
  11. ui设计网站资料大全,你想要的都有
  12. 机器学习概念西洋跳棋
  13. 深入存储驱动:Overlay2
  14. dao层通用封装_层超类型模式:封装多层系统中的通用实现
  15. Python学习笔记(一)压缩与解压缩文件
  16. 读书笔记-Coordinated Deep Reinforcement Learners for Traffic Light Control
  17. openstack自动部署工具
  18. JAVA的符号引用和直接引用
  19. ifix5.8连接ab plc的点-通过igs
  20. js 对象深拷贝 合并对象

热门文章

  1. pe系统测试软件,使用PE系统显示器测试工具检测电脑屏幕的方法
  2. 用python 开发FreeCad 入门
  3. 移动前端开发跟Web前端开发一样吗?有什么区别?
  4. 截图智能识字demo
  5. opencv学习笔记(三)颜色转换 cvtColor
  6. 最常用的看板工具,敏捷开发工具
  7. Scratch Games Scratch游戏
  8. 数据库增删改查的基本语法
  9. grub2启动出错(Error11:Unrecognized device string)
  10. 转载:矩阵L2,1范数及矩阵L2,p范数的求导