国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

RecyclerView消除底部分割線的方法

2019-12-12 05:10:48
字體:
來源:轉載
供稿:網友

最近遇到一個問題,用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);    }  }

因為這個類我們不能直接修改,所以我們可以自定義一個類,修改相應內容,

添加分割線的時候,使用自定義類。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长宁县| 永川市| 历史| 日土县| 长汀县| 迁安市| 宁远县| 衡阳县| 长泰县| 辉南县| 临城县| 江口县| 东阿县| 凉山| 秀山| 扎鲁特旗| 东辽县| 永顺县| 新沂市| 应城市| 肇庆市| 台安县| 绥化市| 稷山县| 城固县| 修武县| 桂东县| 威宁| 仙居县| 白城市| 东源县| 鹤峰县| 高碑店市| 璧山县| 内江市| 青海省| 连云港市| 龙山县| 广德县| 嘉荫县| 张家港市|