Android(安卓)聊天界面对话
16lz
2021-01-24
转载请注明出处: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.MyViewHolder> { List list; Context context; int leftOrRight; public ItemAdapter( Context context) { this.context = context; list=new ArrayList<>(); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder holder = new MyViewHolder(LayoutInflater.from( context).inflate(R.layout.item_layout, parent, false)); return holder; } @Override public 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); } @Override public 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; @Override protected 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(安卓)布局 屏幕适配
- Android实现自定义对话框(Dialog)
- Android网络请求库——android-async-http使用
- 通过浏览器调用Android或iOS应用
- Android开发——Android手机屏幕适配方案总结
- Android显示圆角图片,可指定图片某几个角为圆角
- Android可收缩/扩展的TextView【2】
- Android(安卓)HttpClient GET或者POST请求基本使用方法
- Android(安卓)ImageView的ScaleType属性