全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android 给RecyclerView添加分割线的具体步骤(分享)

【吐槽】RecyclerView没有提供分割线的方法,想要加个线还要自己画,点击事件的监听都要自己实现,不过真的好用。

给RecyclerView添加分割线的步骤

1、新建类继承于RecyclerView.ItemDecoration,此为是抽象类:

  public static abstract class ItemDecoration {

  public void onDraw(Canvas c, RecyclerView parent, State state) {
    onDraw(c, parent);
  }

  public void onDrawOver(Canvas c, RecyclerView parent, State state) {
    onDrawOver(c, parent);
  }

  public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
    getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),
        parent);
  }

}

“onDraw和onDrawOver,显然,这两个方法是用于绘制的,那么绘制分割线的逻辑可以放在这里面,它们二者的具体区别是:onDraw是在item view绘制之前调用,而onDrawOver是在item view绘制之后调用,因此我们一般选择重写其中一个方法即可。getItemOffsets,这个方法是告诉RecyclerView在绘制完一个item view的时候,应该留下多少空位,以便于绘制分割线。”

好像逻辑也不难,但是真的好麻烦,比如我要给我的瀑布流布局加一条系统自带的分割线,系统自带的就行,那我要新建一个实现类:

public class DividerItemDecoration extends RecyclerView.ItemDecoration {
    //使用系统自带的listDivider
    private static final int[] ATTRS = new int[]{
        android.R.attr.listDivider
    };

    private Drawable mDivider;

    public DividerItemDecoration(Context context) {
      super();
      // 从TypedArray中得到一个Drawable对象
      final TypedArray typedArray = context.obtainStyledAttributes(ATTRS);
      mDivider = typedArray.getDrawable(0);

      typedArray.recycle();
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
      super.onDraw(c, parent, state);
      drawDivider(c, parent);
    }

    /**
     * 遍历childView,为每一个childView描绘divider
     * @param c 画布对象
     * @param parent 父控件即RecyclerView
     */
    private void drawDivider(Canvas c, RecyclerView parent) {
      //获取分割线的上边距,即RecyclerView的padding值
      final int top = parent.getPaddingTop();

      //分割线下边距
      final int bottom = parent.getHeight() - parent.getPaddingBottom();

      final int childCount = parent.getChildCount();

      //遍历所有item view,为它们的右边方绘制分割线,就是计算出上下左右四个值画一个矩形
      for (int i = 0; i < childCount; i++) {
        final View child = parent.getChildAt(i);
        final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
        final int left = child.getRight() + params.rightMargin;
        final int right = left + mDivider.getIntrinsicWidth();
        //画右边的divider
        mDivider.setBounds(left, top, right, bottom);
        mDivider.draw(c);

        //画完右边画底边
        mDivider.setBounds(child.getLeft() + child.getPaddingLeft(), child.getBottom() + params.bottomMargin,
            child.getRight() - child.getPaddingRight(), child.getBottom() + mDivider.getIntrinsicHeight());
        mDivider.draw(c);
      }
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
      super.getItemOffsets(outRect, view, parent, state);
      outRect.set(0, 0, mDivider.getIntrinsicHeight(), mDivider.getIntrinsicHeight());
    }
  }

2、为RecyclerView添加写好的ItemDecoration即可

mRecyclerView.addItemDecoration(new DividerItemDecoration(this));

3、没有3。

其实从 RecyclerView.ItemDecoration 的名字就看得出来,它是RecyclerView的item的装饰品,也就是说,除了画分割线,想画什么都是可以的。

以上这篇Android 给RecyclerView添加分割线的具体步骤(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# recyclerview  # 分割线  # Android实现RecyclerView添加分割线的简便方法  # Android RecyclerView实现水平、垂直方向分割线  # RecyclerView底部分割线去除的方法  # android中RecyclerView自定义分割线实现  # Android RecyclerView网格布局(支持多种分割线)详解(2)  # Android中RecyclerView上拉下拉  # 多条目的实例代码  # 万能RecyclerView分割线  # RecyclerView消除底部分割线的方法  # RecyclerView的万能分割线  # RecyclerView自定义分割线  # 是在  # 遍历  # 给大家  # 系统自带  # 都是  # 我要  # 放在  # 都要  # 它是  # 这两个  # 就行  # 希望能  # 上下左右  # 看得  # 重写  # 这篇  # 其中一个  # 要给  # 好用 


相关文章: 网站好制作吗知乎,网站开发好学吗?有什么技巧?  如何在企业微信快速生成手机电脑官网?  浅析上传头像示例及其注意事项  如何在IIS中新建站点并配置端口与IP地址?  如何选择香港主机高效搭建外贸独立站?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  建站三合一如何选?哪家性价比更高?  已有域名如何免费搭建网站?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  山东网站制作公司有哪些,山东大源集团官网?  XML的“混合内容”是什么 怎么用DTD或XSD定义  如何确保西部建站助手FTP传输的安全性?  高防服务器租用首荐平台,企业级优惠套餐快速部署  专业商城网站制作公司有哪些,pi商城官网是哪个?  建站之星代理如何获取技术支持?  建站之星如何快速解决建站难题?  如何在Windows 2008云服务器安全搭建网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  如何快速搭建高效WAP手机网站?  如何使用Golang table-driven基准测试_多组数据测量函数效率  红河网站制作公司,红河事业单位身份证如何上传?  建站之星展会模版如何一键下载生成?  css网站制作参考文献有哪些,易聊怎么注册?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  建站之星代理商如何保障技术支持与售后服务?  网站制作网站,深圳做网站哪家比较好?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  香港服务器选型指南:免备案配置与高效建站方案解析  广德云建站网站建设方案与建站流程优化指南  如何在云主机上快速搭建网站?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  如何通过免费商城建站系统源码自定义网站主题与功能?  临沂网站制作企业,临沂第三中学官方网站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  建站上市公司网站建设方案与SEO优化服务定制指南  如何通过PHP快速构建高效问答网站功能?  广平建站公司哪家专业可靠?如何选择?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  免费网站制作appp,免费制作app哪个平台好?  建站之星安装提示数据库无法连接如何解决?  建站之星2.7模板:企业网站建设与h5定制设计专题  香港服务器WordPress建站指南:SEO优化与高效部署策略  安徽网站建设与外贸建站服务专业定制方案  行程制作网站有哪些,第三方机票电子行程单怎么开?  javascript中的try catch异常捕获机制用法分析  宝塔建站助手安装配置与建站模板使用全流程解析  常州自助建站费用包含哪些项目? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。