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添加分割线的具体步骤(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

时间: 2024-10-15 01:12:54

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

Android实现RecyclerView添加分割线的简便方法

1.前言 刚开始学习RecyclerView的时候我跟着一个视频学的,当时添加分割线是从外面导入一个Java类,然后使用里面的函数来创建分割线的,所以一直以来我都是这样做的.直到前几天才无意中发现,原来v7包中提供了一个DividerItemDecoration类,利用它,我们可以很简单地实现RecyclerView的分割线!那还等什么呢?赶紧用起来. 2.创建一个简单的RecyclerView 首先当然应该来一个RecyclerView,这里就不再赘述了,随便造点数据就好.直接上代码: pub

android中RecyclerView自定义分割线实现

最近一直在看RecyclerView,较之ListView它确实是灵活多变,给予开发者更多自定义的空间,比如:需要添加头部和尾部.item的点击事件.自定义的LayoutManager,还有就是下面要说的自定义的分割线. 1.如何理解分割线 经常听到有人说自定义分割线麻烦,为什么不把分割线写到item布局里,这样不是更简单吗?有些情况把分割线写到item布局里是很难达到我们想要的效果,例如RecyclerView里的GridLayoutManager,StaggeredGridLayoutMan

如何为RecyclerView添加Header和Footer_Android

过去的两天,在项目中,抛弃了ListView, 想试一试RecyclerView, 在用的过程中,遇到了一些问题,比如:如何为RecyclerView添加Header和Footer? 如何为RecyclerView添加分割线?如何为RecyclerView添加下拉刷新和上拉加载? 在今后的一段时间里,我会针对这几个问题,通过写简书的方式一一讲述, 今天为大家带来的是第一个问题的解决方法,如何为RecyclerView添加Header和Footer?在这之前,我想分享一下我对RecyclerVie

如何为RecyclerView添加Header和Footer

过去的两天,在项目中,抛弃了ListView, 想试一试RecyclerView, 在用的过程中,遇到了一些问题,比如:如何为RecyclerView添加Header和Footer? 如何为RecyclerView添加分割线?如何为RecyclerView添加下拉刷新和上拉加载? 在今后的一段时间里,我会针对这几个问题,通过写简书的方式一一讲述, 今天为大家带来的是第一个问题的解决方法,如何为RecyclerView添加Header和Footer?在这之前,我想分享一下我对RecyclerVie

android实现状态栏添加图标的函数实例

本文实例讲述了android实现状态栏添加图标的函数.分享给大家供大家参考.具体如下: private void showNotification() { // 创建一个NotificationManager的引用 NotificationManager notificationManager = (NotificationManager) AutoFile.this.getSystemService(android.content.Context.NOTIFICATION_SERVICE);

Android RecyclerView添加FootView和HeadView_Android

前提概要: 上一篇文章已经介绍过了RecyclerView的基本使用方法,原文如下:android RecyclerView布局真的只是那么简单!此篇文章算是对RecyclerView更深使用的介绍. FootView和HeadView在ListView中的本身就有相对应的函数,但是在新潮的RecyclerView中却没有了,FootView在分页加载(上拉加载更多)中起着很重要的作用,因此也必须要学习一下了.(HeadView的添加与FootView的添加相比大致一样,在此就只讲FootVie

Android中RecyclerView上拉下拉,分割线,多条目的实例代码

//activity的xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity

Android RecyclerView添加头部和底部的方法_Android

如果只是想添加头部,可是使用GitHub里面这个项目,它可以为LinearLayoutManager,GridLayoutManager ,StaggeredGridLayoutManager布局的RecyclerView添加header.使用起来也十分简单: 只需将RecyclerViewHeader布局放在RecyclerView的上层. <FrameLayout android:layout_width="match_parent" android:layout_heigh

Android RecyclerView添加上拉加载更多功能_Android

上一篇文章已经介绍了如何为RecyclerView添加FootView,在此基础上,要添加分页加载的功能其实已经很简单了. 上一篇文章地址:为RecyclerView添加FootView和HeadView 效果:(源码在文章结尾) 实现关键 在上一篇代码的基础上,只需要在onBindViewHolder(ViewHolder holder, int position)函数中添加一定修改就可以了,如下: @Override public void onBindViewHolder(ViewHold