首先,在build.gradle中添加函数依赖库。
编辑主界面。
<《》LinearLayout 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:orientation=”vertical”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”.MainActivity”
android:background=”#d8e0e8”
>
<《》android.support.v7.widget.RecyclerView
android:id=”@+id/recyclerview”
android:layout_width=”match_parent”
android:layout_height=”0dp”
android:layout_weight=”1”/>
<《》LinearLayout
android:layout_width=”match_parent”
android:layout_height=”wrap_content”>
<《》EditText
android:id=”@+id/input_text”
android:layout_width=”0dp”
android:layout_height=”wrap_content”
android:layout_weight=”1”
android:hint=”Type spmething here”
android:maxLines=”2”/>
<《》Button
android:id=”@+id/send”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”send”/>
<《》/LinearLayout>
<《》/LinearLayout>

定义RecyclerView,其中的weight是占的区块。
再定义一个LinearLayout,添加文本行和发送按钮

创建一个类,进行对消息进行体现的。
public class Msg {
public static final int TYPE_RECEIVED = 0;//接收的信号
public static final int TYPE_SEND = 1;//发送的信号
private String content;//发送还是接收的内容
private int type;//发送还是接受
public Msg(String content,int type){
this.content = content;
this.type = type;
}
public String getContent(){//获取内容
return content;
}
public int getType(){//获取是发送还是接收
return type;
}

创建一个msg_item.xml布局:
<《》LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:padding=”10dp”
>
<《》LinearLayout
android:id=”@+id/left_layout”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”left”
android:background=”@drawable/dialog” >
<《》TextView
android:id=”@+id/left_msg”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center”
android:layout_margin=”10dp” />
<《》/LinearLayout>
<《》LinearLayout
android:id=”@+id/right_layout”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”right”
android:background=”@drawable/dialog_right”>
<《》TextView
android:id=”@+id/right_msg”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center”
android:layout_margin=”10dp”/>
<《》/LinearLayout>
<《》/LinearLayout>

添加两个线性排列,一个为左边,一个为右边,都含有文本框

创建一个适配器:
public class MsgAdapter extends RecyclerView.Adapter<《》MsgAdapter.ViewHolder> {
private List<《》Msg> mMsgList;
static class ViewHolder extends RecyclerView.ViewHolder {
LinearLayout leftLayout;//左边的布局
LinearLayout rightLayout;//右边的布局
TextView leftMsg;
TextView rightMsg;
public ViewHolder(View view){
super(view);
leftLayout = (LinearLayout)view.findViewById(R.id.left_layout);
rightLayout =(LinearLayout)view.findViewById(R.id.right_layout);
leftMsg = (TextView)view.findViewById(R.id.left_msg);
rightMsg = (TextView)view.findViewById(R.id.right_msg);
}
}
public MsgAdapter(List<《》Msg> msgList){
mMsgList = msgList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {//创建其实例,并将view发送到ViewHolder类中,进行获取id号
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.msg_item,viewGroup,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
Msg msg = mMsgList.get(i);
if(msg.getType()==Msg.TYPE_RECEIVED){
//显示全局,来分别选取需要的局面
//如果是收到的消息,则显示左边的消息布局,将右边的消息布局隐藏
viewHolder.leftLayout.setVisibility(View.VISIBLE);//显示左边的布局,有内容
viewHolder.rightLayout.setVisibility(View.GONE);//将右边的布局隐藏,无内容
viewHolder.leftMsg.setText(msg.getContent());
}
else
if (msg.getType()==Msg.TYPE_SEND){
//如果是收到的消息,则显示右边的消息布局,将左边的消息布局隐藏
viewHolder.rightLayout.setVisibility(View.VISIBLE);//隐藏左边的布局,有内容
viewHolder.leftLayout.setVisibility(View.GONE);//将左边的布局显示,无内容
viewHolder.rightMsg.setText(msg.getContent());
}
}
@Override
public int getItemCount() {
return mMsgList.size();
}}
适配器多次提起用来对子项的显示。

主类中:
public class MainActivity extends AppCompatActivity {
public List<《》Msg> msgList = new ArrayList<>();
private EditText inputText;
private Button send;
private RecyclerView msgRecyclerView;
private MsgAdapter msgAdapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initMsgs();//初始化
inputText = (EditText)findViewById(R.id.input_text);
send = (Button)findViewById(R.id.send);
msgRecyclerView = (RecyclerView)findViewById(R.id.recyclerview);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
msgRecyclerView.setLayoutManager(layoutManager);
msgAdapter = new MsgAdapter(msgList);
msgRecyclerView.setAdapter(msgAdapter);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String content = inputText.getText().toString();
if(!”“.equals(content)){
Msg msg = new Msg(content,Msg.TYPE_SEND);
msgList.add(msg);
msgAdapter.notifyItemInserted(msgList.size()-1);//当有新消息时,刷新RecyclerView中的显示,将添加刚刚输入的内容。
msgRecyclerView.scrollToPosition(msgList.size()-1);//将RecyclerView定位在最后一个,此函数进行定位
inputText.setText(“”);//清空
}
}
});
}
public void initMsgs(){
Msg msg1 = new Msg(“Hello guy “,Msg.TYPE_RECEIVED);
msgList.add(msg1);
Msg msg2 = new Msg(“hello xxxxxxxxxxxxxxx”,Msg.TYPE_SEND);
msgList.add(msg2);
Msg msg3 = new Msg(“xiixixixixixiix!”,Msg.TYPE_RECEIVED);
msgList.add(msg3);
}
}

模拟QQ聊天记录界面 RecyclerView相关推荐

  1. java的Swing组件模拟qq登录界面

    代码来自传智播客第二版(java)图片可根据自己喜好下载相关图片,建议将图片放到工作空间的目录下面,这样就可以直接获取图片,例如以这个格式"xxx.jpg",xxx图片名,jpg格 ...

  2. HTML+CSS 模拟QQ邮箱登录界面

    模拟QQ邮箱登录界面 index.html <!DOCTYPE html> <html lang="en"> <head><meta ch ...

  3. 模拟QQ音乐微信登录界面

    模拟QQ音乐微信登录界面 先上代码 html代码 <!DOCTYPE html> <html lang="en"> <head><meta ...

  4. 利用java知识做一个模拟qq登入模拟界面

    qq模拟登入界面 一.设计概述 1.使用java所学知识,做一个qq登入模拟界面,如图所示. QQ登录界面整体可以看做一个容器窗口,使用JFrame容器来实现,从登录界面的布局效果和显示内容可以看出, ...

  5. 模拟QQ聊天小项目收尾---界面展示服务端与客户端进行信息交互(用到的知识:io,线程,Swing界面,面向对象思想...... )

    大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文学到有用的干货知识,那么请您尽量点赞,关注,评论,收藏 这两天我一直在设计这 ...

  6. Socket编程 ------ 模拟QQ聊天工具

    模拟QQ聊天 一.要求 1.一个服务器可以与多个用户同时通讯 2.用户可以通过服务器与用户之间通讯 3.用户可以选择和所有人发消息,也可以选择和某个用户单独发消息 4.服务器要显示当前所有在线人员 5 ...

  7. Java程序模拟QQ空间登录 - 并模拟刷说说的赞(图文) 注意:腾讯修改了加密算法,已失效(2015-01-31)

    Java程序模拟QQ空间登录 - 并模拟刷说说的赞 背景:在2013-10-25的一天,有个friend在QQ问我:"post登陆QQ空间抓取不到post的数据".于是故事就开始了 ...

  8. Unity Shader(一) Lowpoly动态低多边形 (QQ登录界面低边动画)

    前言 在逛论坛的时候偶然发现有人在问动态低多边形(Lowpoly)是如何实现的,因为经常编写UGUI拓展对顶点操作较为熟悉的我立马就想到利用继承UnityEngine.Graphic,重写OnPopu ...

  9. QQ聊天记录备份助手 v1.0——搜索、备份、恢复QQ聊天记录文件,重装系统必备...

    项目地址 https://github.com/guoyaohua/QQBackUp 开发环境 Netbean JAVA 功能描述 自动搜索硬盘中的QQ聊天记录文件 可选择的备份QQ数据记录 还原QQ ...

最新文章

  1. 使用脚本规范化企业office程序注册名
  2. Bound Services
  3. SAP成都研究院C4C光明左使:SAP Cloud for Customer 使用SAP UI5的独特之处
  4. 桌面消息提醒_手机消息总是延迟,真的是网速不行?3招教你找出捣鬼设置
  5. 鸿蒙2.0手机版体验,华为鸿蒙OS 2.0手机版功能抢先曝光:体验前所未有
  6. 牛腩新闻发布系统总结——网站发布和分页制作
  7. Java编程题——判断年份是否为闰年
  8. pkm与png的相互转化
  9. kaggle quora_我想以自己的方式使用网络,非常感谢Quora。
  10. 分享如何搭建手机工作室网络
  11. 利用Spring扩展点模拟Feign实现远程调用(干货满满)「扩展点实战系列」- 第445篇
  12. android原生系统 抽屉,Android N或取消原生应用抽屉
  13. 巴西柔术第一课:骑乘式上位技术
  14. jay chou歌词 文本下载数据下载
  15. 简单的卷积神经网络,实现手写英文字母识别
  16. 少儿编程网站源码和scratch课程
  17. 听歌学日语2 五十音图 たなは行
  18. CorelDRAW2022最新版本号V24.0.0.301订阅版
  19. 如何搭建Jenkins导出Unity安卓环境
  20. Navagent 相互碰撞被弹飞的矫正方法

热门文章

  1. Android App 性能优化之安装包大小
  2. Python基础定义
  3. Filter的FilterChain执行顺序
  4. 国内哪些公司布局了元宇宙 元宇宙公司有哪些
  5. Android中对app应用内存的分配
  6. axure文件如何加密_产品原型 | Axure原型,可以像网盘一样管理
  7. 怎么把照片webp格式改成jpg?
  8. 聚美优品张川:如何搭建秒杀场景下的运维架构
  9. element-two
  10. 利用python进行身份证号码大全_用 Java 撸一个身份证号码识别系统,准确率高达 90%...