1.导包
2.主布局里面写代码compile 'com.android.support:recyclerview-v7:26.1.0'
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="comqq.example.hasee.myapplication.MainActivity" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" ></android.support.v7.widget.RecyclerView> </LinearLayout>
3.创建适配器
public class spq extends RecyclerView.Adapter<spq.ViewHolder> { private Context co; private ArrayList<String> arr; private RecyclerView rv; public spq(Context co, ArrayList<String> arr, RecyclerView rv) { this.co = co; this.arr = arr; this.rv = rv; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //想要item文字居中必须这样写 View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.buju, parent, false); return new ViewHolder(inflate); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.tv.setText(arr.get(position)); } @Override public int getItemCount() { return arr.size(); } public class ViewHolder extends RecyclerView.ViewHolder { TextView tv; public ViewHolder(View itemView) { super(itemView); tv=itemView.findViewById(R.id.tv); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int childAdapterPosition = rv.getChildAdapterPosition(view); Toast.makeText(co,arr.get(childAdapterPosition), Toast.LENGTH_SHORT).show(); } }); } } }
4.在创建一个类继承RecyclerView.ItemDecoration
public class zdy extends RecyclerView.ItemDecoration { private Context co; private Drawable dr; private int sum; private int top,bottom,left,right; private int orientation; //采用系统内置的风格的分割线 private static final int[] attrs=new int[]{android.R.attr.listDivider}; public zdy(Context co, int orientation) { dr = co.obtainStyledAttributes(attrs).getDrawable(0); this.orientation = orientation; } //这是垂直分割线 @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDraw(c, parent, state); if(OrientationHelper.HORIZONTAL==orientation) {//判断是水平还是垂直 //绘制水平方向的分割线 top = parent.getPaddingTop(); bottom = parent.getHeight() - parent.getPaddingBottom(); for (int i = 0; i < parent.getChildCount(); i++) { View childAt = parent.getChildAt(i); RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) childAt.getLayoutParams(); left = childAt.getRight() + layoutParams.rightMargin; right = left + dr.getIntrinsicWidth(); dr.setBounds(left, top, right, bottom); dr.draw(c); } }else { //绘制垂直方向的分割线 left=parent.getPaddingLeft(); right=parent.getWidth()-parent.getPaddingRight(); for (int i = 0; i <parent.getChildCount() ; i++) { View childAt = parent.getChildAt(i); RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) childAt.getLayoutParams(); top=childAt.getBottom()+layoutParams.bottomMargin; bottom=top+dr.getIntrinsicHeight(); dr.setBounds(left,top,right,bottom); dr.draw(c); } } } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); if (OrientationHelper.HORIZONTAL==orientation){//判断是水平还是垂直 outRect.set(0,0,dr.getIntrinsicWidth(),0); }else { outRect.set(0,0,0,dr.getIntrinsicHeight()); } } }
5.在到主函数里面实例化控件等
public class MainActivity extends AppCompatActivity { private RecyclerView rv; private ArrayList<String> arr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rv=findViewById(R.id.rv); arr=new ArrayList<>(); for (int i = 0; i <20 ; i++) { arr.add("我是"+i); } //new 一个布局管理者 LinearLayoutManager sta = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); //添加下划线 rv.addItemDecoration(new zdy(this, OrientationHelper.VERTICAL)); rv.setLayoutManager(sta); rv.setAdapter(new spq(this,arr,rv)); } }