1.添加依赖:compile 'com.android.support:recyclerview-v7:24.2.1'
2.使用控件:
<?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" android:orientation="vertical" tools:context="com.example.mjon.myapplication.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/list" 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:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="send" /> </LinearLayout> </LinearLayout>
3.RecyclerView子项布局:
<?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:orientation="vertical"> <LinearLayout android:id="@+id/left_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" android:background="@drawable/chat"> <TextView android:id="@+id/left_message" 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/chat"> <TextView android:id="@+id/right_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="10dp" /> </LinearLayout> </LinearLayout>
4.实体类:
package com.example.mjon.myapplication; public class Message { public static final int TYPE_RECEIVER = 0; //接收 public static final int TYPE_SEND = 1; //发送 private String content; //内容 private int type; public Message(String content, int type) { this.content = content; this.type = type; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public int getType() { return type; } public void setType(int type) { this.type = type; } }
5.自定义适配器:
package com.example.mjon.myapplication; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import java.util.List; public class MyBaseAdapter extends RecyclerView.Adapter<MyBaseAdapter.ViewHolder> { private List<Message> iData; public MyBaseAdapter(List<Message> iData) { this.iData = iData; } static class ViewHolder extends RecyclerView.ViewHolder { private LinearLayout left_layout; private LinearLayout right_layout; private TextView left_tv; private TextView right_tv; public ViewHolder(View itemView) { super(itemView); left_layout = (LinearLayout) itemView.findViewById(R.id.left_layout); right_layout = (LinearLayout) itemView.findViewById(R.id.right_layout); left_tv = (TextView) itemView.findViewById(R.id.left_message); right_tv = (TextView) itemView.findViewById(R.id.right_message); } } @Override public MyBaseAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_list, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(MyBaseAdapter.ViewHolder holder, int position) { Message message = iData.get(position); if (message.getType() == Message.TYPE_RECEIVER) { holder.left_layout.setVisibility(View.VISIBLE); holder.right_layout.setVisibility(View.GONE); holder.left_tv.setText(message.getContent()); } else if (message.getType() == Message.TYPE_SEND) { holder.right_layout.setVisibility(View.VISIBLE); holder.left_layout.setVisibility(View.GONE); holder.right_tv.setText(message.getContent()); } } @Override public int getItemCount() { return iData.size(); } }
6.MainActivity:
package com.example.mjon.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private List<Message> iData = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initMessage(); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager); MyBaseAdapter myBaseAdapter = new MyBaseAdapter(iData); recyclerView.setAdapter(myBaseAdapter); } private void initMessage() { iData.add(new Message("早~肖明", 0)); iData.add(new Message("早~", 1)); iData.add(new Message("你昨天把作业上交了吗,我想改下资料", 0)); iData.add(new Message("OK?", 0)); iData.add(new Message("我昨天晚上已经上交了", 1)); } }