RecycleView自带加分割线方法: ItemDecoration
但是没有提供默认的分割线样式,所以需要自己定义类继承它自己绘制。
addItemDecoration(new ListViewDecoration(getActivity()));// 调用添加分割线方法。
配置分割线的类如下:
public class ListViewDecoration extends RecyclerView.ItemDecoration {
private Drawable mDrawable;
private Context context;
public ListViewDecoration(Context context) {
this.context=context;
mDrawable = ResCompat.getDrawable(context, R.drawable.divider_recycler);
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
final int left = parent.getPaddingLeft();
final int right = parent.getWidth() - parent.getPaddingRight();
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount - 1; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
// 以下计算主要用来确定绘制的位置
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mDrawable.getIntrinsicHeight();
//这里的四个值分别代表 left,top,right,bottom,可以指定分割线在布局中的位置
mDrawable.setBounds(100, top, right, bottom);
mDrawable.draw(c);
}
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
//一下四个参数表示控件内边距(padding),分别是:left,top,right,bottom
}} 其中的分割线样式为:divider_recycler.xml文件,代码如下:outRect.set(0, 0, 0, mDrawable.getIntrinsicHeight());
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/darker_gray" /> <size android:height="1px" /> </shape>
按照如上方式配置好后,一个简单的RecycleView分割线就实现了。