【吐槽】RecyclerView没有提供分割线的方法,想要加个线还要自己画,点击事件的监听都要自己实现,不过真的好用。
公共静态抽象类ItemDecoration { 公共空间> 公共类DividerItemDecoration RecyclerView延伸。ItemDecoration {//使用系统自带的listDivider 私有静态最终int [] ATTRS=new int [] { android.R.attr.listDivider }; 私人可拉的mDivider; 公共DividerItemDecoration(上下文语境){ 超级();//从TypedArray中得到一个可拉的对象 最后TypedArray TypedArray=context.obtainStyledAttributes (ATTRS); mDivider=typedArray.getDrawable (0); typedArray.recycle (); } @Override 公共空间onDraw(帆布c, RecyclerView家长,RecyclerView。状态状态){ 超级。onDraw (c、父母、状态); drawDivider (c,父); }/* * *遍历childView,为每一个childView描绘分配器 * @param c画布对象 * @param父母父控件即RecyclerView */私人空间drawDivider(帆布c, RecyclerView父母){//获取分割线的上边距,即RecyclerView的填充值 最后int顶级=parent.getPaddingTop ();//分割线下边距 最后一个int底部=parent.getHeight ()——parent.getPaddingBottom (); 最后一个int childCount=parent.getChildCount ();//遍历所有项目视图,为它们的右边方绘制分割线,就是计算出上下左右四个值画一个矩形 for (int i=0;我& lt;childCount;我+ +){ 最后查看孩子=parent.getChildAt(我); 最后RecyclerView。LayoutParams params=(RecyclerView.LayoutParams) child.getLayoutParams (); 最终int=child.getRight () + params.rightMargin; 最后一个int右=左+ mDivider.getIntrinsicWidth ();//画右边的分频器 mDivider。setBounds(左,上,右,下); mDivider.draw (c);//画完右边画底边 child.getPaddingLeft mDivider.setBounds (child.getLeft () + (), child.getBottom () + params.bottomMargin, child.getRight ()——child.getPaddingRight (), child.getBottom mDivider.getIntrinsicHeight () + ()); mDivider.draw (c); } } @Override 观点看来,公共空间getItemOffsets(矩形outRect RecyclerView母公司RecyclerView。状态状态){ 超级。getItemOffsets (outRect、视图、父母、状态); outRect。集(0,0,mDivider.getIntrinsicHeight (), mDivider.getIntrinsicHeight ()); } }
mRecyclerView。addItemDecoration(新DividerItemDecoration ());
其实从RecyclerView。ItemDecoration的名字就看得出来,它是RecyclerView的物品的装饰品,也就是说,除了画分割线,想画什么都是可以的。
以上这篇Android给RecyclerView添加分割线的具体步骤(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。