RecyclerView消除底部分割线的方法
程序员文章站
2024-03-05 08:29:48
最近遇到一个问题,用recyclerview显示数据,纵向列表显示,添加默认分割线。
问题是:底部也会显示分割线,这很影响美观。
怎么解决这个问题呢?我想了很多...
最近遇到一个问题,用recyclerview显示数据,纵向列表显示,添加默认分割线。
问题是:底部也会显示分割线,这很影响美观。
怎么解决这个问题呢?我想了很多办法,毫无头绪。。。
最后,查看默认分割线的类divideritemdecoration的源码:
public class divideritemdecoration extends itemdecoration { private static final int[] attrs = new int[]{16843284}; public static final int horizontal_list = 0; public static final int vertical_list = 1; private drawable mdivider; private int morientation; public divideritemdecoration(context context, int orientation) { typedarray a = context.obtainstyledattributes(attrs); this.mdivider = a.getdrawable(0); a.recycle(); this.setorientation(orientation); } public void setorientation(int orientation) { if(orientation != 0 && orientation != 1) { throw new illegalargumentexception("invalid orientation"); } else { this.morientation = orientation; } } public void ondraw(canvas c, recyclerview parent) { if(this.morientation == 1) { this.drawvertical(c, parent); } else { this.drawhorizontal(c, parent); } } public void drawvertical(canvas c, recyclerview parent) { int left = parent.getpaddingleft(); int right = parent.getwidth() - parent.getpaddingright(); int childcount = parent.getchildcount(); for(int i = 0; i < childcount; ++i) { view child = parent.getchildat(i); layoutparams params = (layoutparams)child.getlayoutparams(); int top = child.getbottom() + params.bottommargin; int bottom = top + this.mdivider.getintrinsicheight(); this.mdivider.setbounds(left, top, right, bottom); this.mdivider.draw(c); } } public void drawhorizontal(canvas c, recyclerview parent) { int top = parent.getpaddingtop(); int bottom = parent.getheight() - parent.getpaddingbottom(); int childcount = parent.getchildcount(); for(int i = 0; i < childcount; ++i) { view child = parent.getchildat(i); layoutparams params = (layoutparams)child.getlayoutparams(); int left = child.getright() + params.rightmargin; int right = left + this.mdivider.getintrinsicheight(); this.mdivider.setbounds(left, top, right, bottom); this.mdivider.draw(c); } } public void getitemoffsets(rect outrect, int itemposition, recyclerview parent) { if(this.morientation == 1) { outrect.set(0, 0, 0, this.mdivider.getintrinsicheight()); } else { outrect.set(0, 0, this.mdivider.getintrinsicwidth(), 0); } } }
因为我用到的是垂直列表,用到的是红色字体处的代码:
public void drawvertical(canvas c, recyclerview parent) { int left = parent.getpaddingleft(); int right = parent.getwidth() - parent.getpaddingright(); int childcount = parent.getchildcount(); for(int i = 0; i < childcount; ++i) { view child = parent.getchildat(i); layoutparams params = (layoutparams)child.getlayoutparams(); int top = child.getbottom() + params.bottommargin; int bottom = top + this.mdivider.getintrinsicheight(); this.mdivider.setbounds(left, top, right, bottom); this.mdivider.draw(c); } }
从代码中很容易看出只要修改for循环中的内容就可去掉底部的分割线:
public void drawvertical(canvas c, recyclerview parent) { int left = parent.getpaddingleft(); int right = parent.getwidth() - parent.getpaddingright(); int childcount = parent.getchildcount(); for(int i = 0; i < childcount-1; ++i) { view child = parent.getchildat(i); layoutparams params = (layoutparams)child.getlayoutparams(); int top = child.getbottom() + params.bottommargin; int bottom = top + this.mdivider.getintrinsicheight(); this.mdivider.setbounds(left, top, right, bottom); this.mdivider.draw(c); } }
因为这个类我们不能直接修改,所以我们可以自定义一个类,修改相应内容,
添加分割线的时候,使用自定义类。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
RecyclerView消除底部分割线的方法
-
Android开发之微信底部菜单栏实现的几种方法汇总
-
Android App使用RecyclerView实现上拉和下拉刷新的方法
-
RecyclerView的万能分割线
-
解决RecyclerView无法onItemClick问题的两种方法
-
Android App使用RecyclerView实现上拉和下拉刷新的方法
-
Android RecyclerView添加头部和底部的方法
-
Android RecyclerView添加头部和底部的方法
-
使用RecyclerView添加Header和Footer的方法
-
Android 关于ExpandableListView去掉里头分割线的方法