GitHub聊天通信开源UI框架stfalcon-studio/ChatKit使用教程
项目地址
- 官网地址:https://github.com/stfalcon-studio/ChatKit
- 官方有比较详细的说明,不过时英文的。
- 本篇源码:
- Gitee:https://gitee.com/up55/chatkit-test
- CSND :https://download.csdn.net/download/JieZhongBa/20030052?spm=1001.2014.3001.5501
官方demo
强烈建议把官方的demo跑出来,可以看到他的效果,还有他的实现方式,毕竟能参考资料真的不多。
部分效果:
使用的时候主要就是结合GitHub里的教程和demo。其实官方给出的教程也比较详细了。
利用demo快速搭建
1. 依赖
首先创建一个新项目,并添加依赖。
先在项目全局gradle中加上这个,才正确导入。
allprojects {repositories {...maven { url "https://jitpack.io" }}
}
再加依赖,第二个是图像加载的,使用简单,用来加载头像图片之类的。
//Chatkit
implementation 'com.github.stfalcon-studio:Chatkit:0.4.1'
//Picasso
implementation "com.squareup.picasso:picasso:2.71828"
2. 布局
页面布局,添加会话列表
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">//会话列表<com.stfalcon.chatkit.dialogs.DialogsListandroid:id="@+id/dialogList"android:layout_width="match_parent"android:layout_height="match_parent"/></RelativeLayout>
3. 实体类
编写实体类,官方已经提供了接口,需要自己实现,这里直接用demo里的,也可自己实现更多效果。
直接复制demo三个实体类,省事。可自行调整。
复制这三个类
4. 数据源
为了方便展示效果,列表的数据源先用demo中的数据,就是写死在代码中,一些数组,存了图片地址、用户名、对话这些,获取数据的时候随机拉取一些,拼凑成聊天记录。demo已经封装好了,直接一个方法调用,很方便,后面再自己替换成自己的数据就好了。
复制下图三个类,他们用了上面三个实体类,复制过来要重新import一下。
其中FixturesData这个类是提供数据的,里面的图片链接有些已经打不开了,自己去网上找几个连接贴上去就好,另外别忘了声明网络权限。
5. 适配器
在activity的onCreate中初始化列表
private DialogsList dialogsList;
private DialogsListAdapter<Dialog> dialogsListAdapter;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dialogsList = findViewById(R.id.dialogList);//初始化适配器并添加图像加载dialogsListAdapter=new DialogsListAdapter<>((imageView, url, payload) -> Picasso.get().load(url).into(imageView));//通过DialogsFixtures给予列表初始数据dialogsListAdapter.addItems(DialogsFixtures.getDialogs());//item项的点击事件,跳转到聊天界面dialogsListAdapter.setOnDialogClickListener(dialog -> {startActivity(new Intent(this,chat.class));});dialogsList.setAdapter(dialogsListAdapter);
}
最简单的构造就是这样了,跑一跑看看效果吧。
还有其他的方法,如item项的长按事件,等,可以参考官方文档。
一些常用的构造器方法:
添加多个会话:addItems(List)
添加单个会话:addItem(索引位置, Dialog);
可以通过item项的set方法更改数据改变会话。
刷新列表:notifyDataSetChanged()
item点击事件:setOnDialogClickListener()
item长按事件:setOnDialogLongClickListener()
···
6. 聊天界面布局
接下来是聊天界面
xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".chat"><com.stfalcon.chatkit.messages.MessagesListandroid:id="@+id/messagesList"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/input" /><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_above="@+id/input"android:layout_marginLeft="16dp"android:layout_marginRight="16dp"android:background="#e8e8e8" /><com.stfalcon.chatkit.messages.MessageInputandroid:id="@+id/input"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"app:inputHint="Message"app:showAttachmentButton="true" /></RelativeLayout>
7. 聊天界面适配器
适配器,看注释吧
public class chat extends AppCompatActivity implements MessagesListAdapter.OnLoadMoreListener{private MessagesList messagesList;private MessageInput input;private MessagesListAdapter<Message> messagesListAdapter;private Date lastLoadedDate;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_chat);messagesList = findViewById(R.id.messagesList);input = findViewById(R.id.input);/** senderId:自己的id,用于区分自己和对方,控制消息气泡的位置。* imageLoader:图像加载器** */messagesListAdapter = new MessagesListAdapter<>("0", (imageView, url, payload) -> Picasso.get().load(url).into(imageView));//滑倒顶部时加载历史记录messagesListAdapter.setLoadMoreListener(this);//发送输入框中的文本,addToStart的第二个参数是列表滚动到底部input.setInputListener(input1 -> {messagesListAdapter.addToStart(MessagesFixtures.getTextMessage(input1.toString()), true);return true;});//小加号按钮点击事件,发送一张图片input.setAttachmentsListener(() -> {//第二个参数表示是否滚动列表到最底部messagesListAdapter.addToStart(MessagesFixtures.getImageMessage(), true);});messagesList.setAdapter(messagesListAdapter);//初始化时调用一次加载历史记录onLoadMore(0,1);}//滚动到顶部加载历史记录@Overridepublic void onLoadMore(int page, int totalItemsCount) {new Handler().postDelayed(() -> {ArrayList<Message> messages = MessagesFixtures.getMessages(lastLoadedDate);lastLoadedDate = messages.get(messages.size() - 1).getCreatedAt();messagesListAdapter.addToEnd(messages, false);}, 1000);}
}
好了这样就能跑了,看看效果吧。
最终效果:
更多效果
可以自定义item样式,但是id必须对应,而官方demo中已经有多个模板,基本上够用了,复制过来即可,也可以自己稍作修改,详情见官方文档很demo。
GitHub聊天通信开源UI框架stfalcon-studio/ChatKit使用教程相关推荐
- 结合BeautyEye开源UI框架实现的较美观的Java桌面程序
BeautyJavaSwingRobot 结合BeautyEye开源UI框架实现的较美观的Java桌面程序,主要功能就是图灵机器人和一个2345网站万年历的抓取.... 挺简单而且实用的一个项目,实现 ...
- android 酷炫编辑框_25个实用酷炫的Android开源UI框架
最近找了一些合适开源控件,这样在日常工作中会更加省时,再此分享给大家,希望能对大家有帮助,此博文介绍的都是UI上面的框架,接下来会有其他的开源框架(如:HTTP框架.DB框架). 1.Side-Men ...
- Android 开源UI框架汇总
1. github排名 https://github.com/trending,github搜索:https://github.com/search 2.https://github.com/wasa ...
- wpf ui框架_RapidCAX 开源UI框架
微信公众号:AnyCAD专注打造新一代图形平台,助每一个工业软件成功! RapidCAX UI框架 从零开始搭建CAD/CAE/CAM的UI框架是一件繁琐的事情:需要选组件.集成组件以及各种配置.若集 ...
- semantic ui中文文档_Vuetify-广受欢迎的Material风格的开源UI框架
全世界范围内广受欢迎的 Vue UI 框架,一个非常精致的 Material Design UI 套件. Material Design 风格 UI 框架 Vuetify 是一个基于 Vue.js 精 ...
- 分享两个超实用的Android开源UI框架——QMUI和XUI
目录 QMUI_Android 功能特性 全局 UI 配置 丰富的 UI 控件 高效的工具方法 功能列表 支持 Android 版本 使用方法 QMUI Demo APP 安装包下载 XUI 特征 演 ...
- android 漂亮的开源ui框架
Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...
- Alibaba开源UI框架V-Layout
最近水掘金的次数大幅度增长,毕竟日推的文章部分还是有很多含金量的.比如前两天看到的来自阿里巴巴开源的UI框架V-layout. V-Layout,全称VirtualLayout,是一个针对Recycl ...
- 整理 酷炫 Android 开源UI框架 Navigation
Side-Menu.Android 分类侧滑菜单,Yalantis 出品. 项目地址:https://github.com/Yalantis/Side-Menu.Android 项目Demo:Side ...
最新文章
- Block的声明和线程安全
- Mysql计算出年纪
- java csf_WebService CSF使用详解 | 学步园
- java中计时器的用法Timer和TimerTask的用法__java中利用Timer与TImerTask 计时器间隔执行任务...
- android richtext显示html,【报Bug】关于rich-text显示html 的问题
- element tabs 添加事件_JavaScript-跨浏览器事件处理程序-Web前端教程
- java 求集合真子集_【同步练习】高一高中数学必修1集合的关系与元素性质
- 使用 ADOX 将 Table 添加到 Catalog 时报“类型无效”的原因和解决方法
- CISCO路由器连接ADSL之PPPoE配置
- Little Kings - SGU 223(状态压缩)
- 数据交互什么意思_学习编程怎么样才可以不枯燥?什么是前端语言?
- SketchUp2019下载SU2019下载安装教程SketchUp草图大师2019下载安装详细教程
- 计算机矩阵入门(eigen)0XC000041D
- Iptables-外网地址及端口映射到内网地址及端口
- 上海电力大学计算机专业全国排名,上海电力大学有哪些专业 上海电力大学专业排名...
- 厦门大学c语言2017,厦门大学2017年各专业录取分数线
- 使用讯飞语音识别的空指针错误
- 访问者模式(JAVA)
- Android 高清加载长图或大图方案
- 网页版JS游戏五子棋单机版也可以改版成网络版