Android 聊天界面对话
来源:互联网 发布:怎么把源码上传到空间 编辑:程序博客网 时间:2024/06/05 10:51
转载请注明出处: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<>(); } @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++; }}
阅读全文
0 0
- Android 聊天界面对话
- 聊天对话界面功能
- 转载]android 实现qq聊天对话界面效果
- 仿微信、QQ聊天界面私信对话效果
- Android 实现聊天界面
- android 仿微信聊天界面
- android仿微信聊天界面
- Android 聊天界面适配器
- Android UI-聊天界面
- Android UI-聊天界面
- Android仿微信聊天界面
- Android UI-聊天界面
- Android编写聊天界面
- Android之QQ聊天气泡对话实现
- Android 仿微信QQ聊天界面
- Android 仿微信QQ聊天界面
- Android聊天软件界面开发
- Android聊天界面实现方式
- C/S B/S
- Hex棋评估函数的设计
- CAS算法原理分析
- Linux文件目录和用户的管理
- HDU 6168 Numbers 思维
- Android 聊天界面对话
- tp5怎么引入extend下面的类
- 8.22
- PHP上传应用
- svn ant tomcat
- Keras以及Tensorflow强制使用CPU,GPU
- How Many Calls? UVA
- 图解c/c++多级指针与“多维”数组
- Java 导出Excel实例