转载请注明出处:http://blog.csdn.net/htwhtw123/article/details/77510010
实现Android 聊天界面对话 ,可以设计成接受到的消息在左显示,发送的消息右边显示。使用RecyclerView实现,主要思路是:在子项布局中同时设置左边和右边的TextView,选择性的让TextView可见或不可见。源码见github:点击跳转。下面是在 Androidd 8.0模拟器运行的效果。

1.导入RecyclerView:
ctr+al+shift+s:打开Project Structure对话框,点击Dependencies标签->点击右边的加号->点击libray dependence->在搜索框输入recyclerview->回车->双击选中下图所示项


2.添加图片,设置图片的拉伸方式:自己找一个一个对话框图片->复制到drawable目录下->右击图片文件->create 9 patch file …->弄成如下的样子->把原图片删除。左右各一个,可以在选择图片时,将图片水平旋转,就有了对称的另一张图。例如下面的communicate_left.9.png

3.设置RecyclerVeiw的子布局:
item_layout.xml中的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:orientation="vertical"><TextView
        android:id="@+id/leftTv"android:textSize="25sp"android:text="左边发出:\n右边你好"android:paddingRight="5dp"android:paddingLeft="10dp"android:paddingTop="5dp"android:paddingBottom="5dp"android:background="@drawable/communicate_left"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextView
        android:id="@+id/rightTv"android:text="右边发出:\n左边你好"android:paddingRight="10dp"android:paddingLeft="5dp"android:paddingTop="5dp"android:paddingBottom="5dp"android:background="@drawable/communicate_right"android:textSize="25sp"android:gravity="right"android:layout_marginRight="2dp"android:layout_width="wrap_content"android:layout_gravity="right"android:layout_height="wrap_content"/></LinearLayout>

4.ItemAdpter适配器代码:

package com.xingyi.chatui;import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.MyViewHolder> {List<String> list;Context context;int leftOrRight;public ItemAdapter( Context context) {this.context = context;list=new ArrayList<>();}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_layout, parent,false));return holder;}@Overridepublic void onBindViewHolder(MyViewHolder holder,  int position) {if(leftOrRight==MainActivity.LEFT){holder.tvLeft.setVisibility(View.VISIBLE);holder.tvRight.setVisibility(View.GONE);holder.tvLeft.setText(list.get(position));}else if(leftOrRight==MainActivity.RIGHT){holder.tvLeft.setVisibility(View.GONE);holder.tvRight.setVisibility(View.VISIBLE);holder.tvRight.setText(list.get(position));}}//添加子项public void addItem(String str,int leftOrRight) {this.leftOrRight=leftOrRight;list.add(str);notifyItemInserted(list.size()-1);}@Overridepublic int getItemCount() {return list.size();}class MyViewHolder extends RecyclerView.ViewHolder {TextView tvLeft,tvRight;public MyViewHolder(View itemView) {super(itemView);tvLeft = (TextView) itemView.findViewById(R.id.leftTv);tvRight = (TextView) itemView.findViewById(R.id.rightTv);}}
}

5.主活动的布局activity_main:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.xingyi.test.MainActivity"android:orientation="vertical"><LinearLayout
        android:gravity="center"android:layout_width="match_parent"android:layout_height="wrap_content"><Button
            android:onClick="leftClick"android:text="左边发送"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Button            android:onClick="rightClick"android:layout_marginLeft="29dp"android:text="右边发送"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout><android.support.v7.widget.RecyclerView
        android:id="@+id/rv"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

6.MainActivity
这里需要注意的是,Recyclerview的导入语句,选择:
import android.support.v7.widget.RecyclerView;

package com.xingyi.chatui;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;public class MainActivity extends AppCompatActivity {RecyclerView recyclerView;ItemAdapter itemAdapter;final  static int LEFT=1;final  static int RIGHT=2;int i=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView(){recyclerView= (RecyclerView) findViewById(R.id.rv);recyclerView.setLayoutManager(new LinearLayoutManager(this));itemAdapter=new ItemAdapter(this);recyclerView.setAdapter(itemAdapter);}public void leftClick(View v){//第一个参数指定发出内容,第二参数指定发出的是左还是右itemAdapter.addItem("左边发出:\n右边你好"+i,LEFT);recyclerView.smoothScrollToPosition(i);//移动到指定位置i++;}public void rightClick(View v){//第一个参数指定发出内容,第二参数指定发出的是左还是右itemAdapter.addItem("右边发出:\n左边你好"+i,RIGHT);recyclerView.smoothScrollToPosition(i);//移动到指定位置i++;}}

Android 聊天界面对话相关推荐

  1. android聊天界面对话气泡_你在和脚本谈恋爱(自动化在IM聊天中的应用)

    谢谢打开这篇文章的每个你 测开之分层自动化(Python)招生简章 Python自动化测试报告美化 在python中进行数据驱动测试 太嚣张了!他竟用Python绕过了"验证码" ...

  2. android聊天界面对话气泡_聊天会话框气泡(示例代码)

    1.聊天会话框气泡的实现 我们将一个div的width.height.font-size设置为0,给它一个border-width值,border-color给定四种不同的颜色,此时我们会看到该div ...

  3. android聊天界面对话气泡_android 模仿QQ聊天气泡 入门级示例源码

    [实例简介] [实例截图] [核心代码] package com.study.androidtest; import java.util.ArrayList; import android.app.A ...

  4. Android 聊天界面背景图片不顶上去内容顶上去解决方法

    Android 聊天界面背景图片被输入法 字数398  阅读923  评论0  喜欢14 相信做过android开发的都知道,当界面中有editText的时候,输入法可能导致把当前界面整个给顶上去,这 ...

  5. 书小宅之android——聊天界面的实现

    制作Nine-Patch图片 说明:一种被特殊处理过的图片,指定哪些区域可以被拉伸,哪些区域不可以. 从android Studio2.3开始,不再单独提供draw9patch.bat文件,要生成Ni ...

  6. android聊天界面与功能,【android】聊天界面的制作-简易版实现

    看完了第一行代码第三章,改进了一些基本功能,下面就听小弟一一道来: 也参考了很多别人的代码,但是总觉得一些功能可以比较轻松的实现就不绕那么多弯子,就用最基础的码代码实现一样的功能:(1)整体布局代码一 ...

  7. 融云android聊天界面,Android 融云IM集成以及使用详解(一)

    Android 融云IM集成以及使用详解(一) 集成 1.具体的集成步骤就不在详细介绍,我们只说干货,附上融云IM官方文档地址,里面有更为详细的集成介绍 https://www.rongcloud.c ...

  8. Android聊天界面中图片大小的合理缩小算法

    应用场景 我们知道在聊天界面中,发送显示图片是不可缺少的一部分,这个时候就会面临对于图片显示控件的缩小处理.当然如果是简单的给ImageView设置一个固定的值的话,这篇文章就没有意义了.我们要做的就 ...

  9. 解决RecyclerView实现聊天界面,但点击下面的EditText后弹出的输入法会遮盖RecyclerView内容的方法

    学习Android也将近4个年头了,一直想写点自己所学的内容来帮助后来人,为互联网奉献自己的一份力量,也算自己的积累.但是之前由于自己的惰性一直没有下笔,那就从今天这一篇开始吧! 我们做Android ...

最新文章

  1. matlab在命令行注册,命令行运行matlab
  2. Oracle 数据库查看具有sysdba系统权限用户,设置、重置sys用户密码
  3. python列表中字典排序_python中字典排序,列表中的字典排序
  4. 反思本地与测试服一个接口不同的响应:本地正常测试服不行500错误,原因php版本新语法不一样
  5. Self Crossing
  6. 玩玩短视频平台和网课平台开发1——腾讯云对象储存COS的初步配置
  7. python两个基本的库管理工具_Python多版本共存管理工具之pyenv
  8. java eclipse
  9. 小米手机如何关闭悬浮球
  10. 第四百零四天 how can I 坚持
  11. Markdown表情关键字大全
  12. 51单片机引脚功能介绍
  13. Android自定义View,画一个好看带延长线的饼状图
  14. IDEA提高运行速度
  15. 安尼泰科T1行车记录仪说明书
  16. Unity零基础到入门 ☀️| 游戏引擎 Unity 从0到1的 系统学习 路线【全面总结-建议收藏】!
  17. 天蝎项目整机柜服务器技术规范v1.01,天蝎项目整机柜服务器技术规范v1.01
  18. android直播怎么投屏,安卓手机怎么直播,Total Control手游投屏教程
  19. Luminati代理动态IP,海量资源可调用!
  20. OD常用断点函数(转载)

热门文章

  1. SAP MM模块常用的表
  2. TRPO:信赖域策略优化
  3. Lumerical------S 参数文件格式
  4. Python中turtle库常用函数
  5. 传感器课程实验:传感器静态特性研究-电涡流传感器位移特性实验
  6. 扶持初创企业成长 佳能再度携手优客工场升级轻松办公新体验
  7. Launcher2 快捷方式图标的圆角处理及解析
  8. 红灯检测宇视科技专利分析与总结2
  9. 【流程工业生产运行的“疑难杂症”,“自主运行”来解决!】
  10. Kafka读取数据是中文乱码问题