一、创建两个xml文件
1 —————————————————————————————1.activity_main.xml——————————————————————————————————
2 <?xml version="1.0" encoding="utf-8"?>
3 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:tools="http://schemas.android.com/tools"
5 android:id="@+id/activity_main"
6 android:layout_width="match_parent"
7 android:layout_height="match_parent"
8 android:background="@drawable/box_bg"
9 tools:context="com.example.yanglei.message_box.MainActivity">
10 <LinearLayout
11 android:orientation="horizontal"
12 android:layout_width="match_parent"
13 android:layout_height="wrap_content"
14 android:padding="5dp"
15 android:background="#fff"
16 android:layout_alignParentBottom="true"
17 android:layout_alignParentStart="true"
18 android:id="@+id/linearLayout">
19
20 <EditText
21 android:layout_width="230dp"
22 android:paddingLeft="10dp"
23 android:layout_height="40dp"
24 android:inputType="textPersonName"
25 android:text=""
26 android:background="@drawable/edi_text_bg"
27 android:ems="10"
28 android:hint="请输入内容"
29 android:id="@+id/input_Text"
30 android:maxLines="2" />
31
32 <Button
33 android:text="发送"
34 android:layout_width="match_parent"
35 android:textColor="#fff"
36 android:background="@drawable/btn_bg"
37 android:id="@+id/send_mess"
38 android:layout_marginLeft="5dp"
39 android:layout_height="39dp" />
40 </LinearLayout>
41
42 <android.support.v7.widget.RecyclerView
43 android:layout_width="match_parent"
44 android:id="@+id/msg_recycler_view"
45 android:layout_height="match_parent"
46 android:layout_alignParentTop="true"
47 android:layout_alignParentStart="true" />
48 </RelativeLayout>
1 —————————————————————————————2.messitem.xml——————————————————————————————————
2 <?xml version="1.0" encoding="utf-8"?>
3 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
4 android:layout_width="match_parent"
5 android:layout_height="wrap_content"
6 android:paddingTop="10dp"
7 android:paddingRight="10dp"
8 android:paddingLeft="10dp">
9 <LinearLayout
10 android:orientation="horizontal"
11 android:layout_width="wrap_content"
12 android:background="@drawable/left"
13 android:id="@+id/layout_left"
14 android:layout_height="wrap_content">
15 <TextView
16 android:text="哈哈"
17 android:layout_width="wrap_content"
18 android:textSize="15dp"
19 android:layout_height="wrap_content"
20 android:id="@+id/mess_left" />
21 </LinearLayout>
22 <LinearLayout
23 android:orientation="horizontal"
24 android:layout_width="wrap_content"
25 android:background="@drawable/regin"
26 android:id="@+id/layout_rigin"
27 android:layout_height="wrap_content"
28 android:layout_alignParentTop="true"
29 android:layout_alignParentEnd="true">
30 <TextView
31 android:text="哈哈"
32 android:layout_width="wrap_content"
33 android:textSize="15dp"
34 android:layout_height="wrap_content"
35 android:id="@+id/mess_reght" />
36 </LinearLayout>
37 </RelativeLayout>
二、创建两个adawable.xml文件
1 ————————————————3.drawable资源文件,btn_bg.xml。发送按钮的背景颜色——————————————————————
2 <?xml version="1.0" encoding="utf-8"?>
3 <selector xmlns:android="http://schemas.android.com/apk/res/android">
4
5 <item android:state_pressed="true">
6 <shape android:shape="rectangle" >
7 <gradient android:startColor="#0686ff" android:endColor="#00b7ff" android:angle="90"/>
8 <stroke android:color="#c1c8cc" android:width="1px"/>
9 <corners android:radius="3dp"/>
10 </shape>
11 </item>
12
13
14 <item>
15 <shape android:shape="rectangle" >
16 <gradient android:startColor="#1a90ff" android:endColor="#15bdff" android:angle="90"/>
17 <stroke android:color="#c1c8cc" android:width="1px"/>
18 <corners android:radius="3dp"/>
19 </shape>
20 </item>
21 </selector>
1 —————————————————————4.drawable资源文件,editext_bg.xml。文本框的背景——————————————————————
2 <?xml version="1.0" encoding="utf-8"?>
3 <selector xmlns:android="http://schemas.android.com/apk/res/android">
4
5
6 <item>
7 <shape android:shape="rectangle" >
8 <gradient android:startColor="#ffffff" android:endColor="#ffffff" android:angle="90"/>
9 <stroke android:color="#cfcfcf" android:width="1px"/>
10 <corners android:radius="3dp"/>
11 </shape>
12 </item>
13 </selector>
三、编写java代码
1.创建一个myAdapter适配器>myAdapter.java--------------------------------------------------
1 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ //泛型
2 private List<Msg> mMsgList;
3
4 public MyAdapter(List<Msg> msgList){ //构造方法,传值为List<Msg>
5 this.mMsgList=msgList;
6 }
7 public class ViewHolder extends RecyclerView.ViewHolder{
8 LinearLayout leftLayout,rightLayout; //声明控件类变量
9 TextView leftMsg,rightMsg; //声明控件类变量
10 public ViewHolder(View itemView) {
11 super(itemView);
12 leftLayout= (LinearLayout) itemView.findViewById(R.id.layout_left); //获得创建好的layout_left id 布局控件
13 rightLayout= (LinearLayout) itemView.findViewById(R.id.layout_rigin); //获得创建好的layout_rigin id 布局控件
14 leftMsg= (TextView) itemView.findViewById(R.id.mess_left); //获取TextView_left_id,并赋值给leftMsgid
15 rightMsg= (TextView) itemView.findViewById(R.id.mess_reght); //获取TextView_reght_id,并赋值给rightMsgid
16 }
17 }
18
19 @Override
20 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //加载itme资源方法
21 View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.mess_item,parent,false); //加载itemlayout资源
22 return new ViewHolder(view); //新实例化上文泛型,参数为刚刚过去的messitem.xml View
23 }
24
25 @Override
26 public void onBindViewHolder(ViewHolder holder, int position) { //循环执行方法
27 Msg msg=mMsgList.get(position); //获取当前下标
28
29 if(msg.getType() == Msg.TYPE_RECEIVED_SD) //如果收到消息 显示左侧的消息布局隐藏右边布局
30 {
31 holder.leftLayout.setVisibility(View.VISIBLE); //设置左侧消息框可见
32 holder.rightLayout.setVisibility(View.GONE); //设置右侧消息框隐藏
33 holder.leftMsg.setText(msg.getContent()); //设置接收到的内容
34
35 }else if(msg.getType()==Msg.TYPE_SENT_FC) //如果是发出消息 显示右侧消息,隐藏左侧消息
36 {
37 holder.leftLayout.setVisibility(View.GONE); //设置左侧消息框可见
38 holder.rightLayout.setVisibility(View.VISIBLE); //设置右侧消息框隐藏
39 holder.rightMsg.setText(msg.getContent()); //设置发送消息
40 }
41 }
42
43 @Override
44 public int getItemCount() { //返回项的总数量
45 return mMsgList.size(); //返回list的总数
46 }
2.创建一个Msg消息实体类>Msg.java--------------------------------------------------
1 public class Msg {
2 public static final int TYPE_RECEIVED_SD=0; //收到的消息标记
3 public static final int TYPE_SENT_FC=1; //发出的消息标记
4 private String content; //消息内容
5 private int type; //消息类型
6
7 public Msg(String content,int type) //声明两参构造方法,声明get set方法
8 {
9 this.content=content;
10 this.type=type;
11 }
12 public String getContent() {
13 return content;
14 }
15
16 public void setContent(String content) {
17 this.content = content;
18 }
19
20 public int getType() {
21 return type;
22 }
23
24 public void setType(int type) {
25 this.type = type;
26 }
27 }
3.MainActivity代码>MainActivity.java--------------------------------------------------
1 public class MainActivity extends AppCompatActivity {
2 private List<Msg> msgList=new ArrayList<>(); //声明List变量
3 private EditText editText; //声明EdiText类变量
4 private Button send; //声明Button类变量
5 private RecyclerView recyclerView; //声明recyclerView类变量
6 private MyAdapter adapter; //声明adapter类变量
7 @Override
8 protected void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10 setContentView(R.layout.activity_main);
11 initMsgs(); //初始化数据
12
13 editText= (EditText) findViewById(R.id.input_Text); //获取组建,赋值给editText类变量
14 send= (Button) findViewById(R.id.send_mess); //获取组建,赋值给send类变量
15 recyclerView= (RecyclerView) findViewById(R.id.msg_recycler_view);
16 recyclerView.setLayoutManager(new LinearLayoutManager(this)); //创建显示方式
17 adapter=new MyAdapter(msgList);
18
19 LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getApplicationContext()); //设置一个GridLayoutManager,图标形式显示,参数一 上下文,参数二,要分成几列显示
20 linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); //是横向显示还是纵向显示,两种选项HORIZONTAL,VERTICAL
21 recyclerView.setAdapter(adapter); //给recyclerView设置 adapter事件
22 send.setOnClickListener(new View.OnClickListener() { //btn发送消息
23 @Override
24 public void onClick(View v) {
25 String content=editText.getText().toString(); //获取editext内容
26 if(!"".equals(content)) //判断context是否是“”,或null
27 {
28 Msg msg=new Msg(content,Msg.TYPE_SENT_FC);
29 msgList.add(msg);
30 adapter.notifyItemInserted(msgList.size()-1); //有消息刷新显示
31 recyclerView.scrollToPosition(msgList.size()-1); //将list定位到最后一行
32 editText.setText("");
33 }
34 }
35 });
36
37 }
应用完成后的图片
