文档章节

Android RecyclerView设置item间距

yaly
 yaly
发布于 2015/10/10 21:17
字数 110
阅读 55711
收藏 6

RecyclerView没有可以直接设置间距的属性,但可以用ItemDecoration来装饰一个item,所以继承重写ItemDecoration就可以实现间距了

public class SpaceItemDecoration extends RecyclerView.ItemDecoration{  
  
        private int space;  
  
        public SpaceItemDecoration(int space) {  
            this.space = space;  
        }  
  
        @Override  
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {  
  
            if(parent.getChildPosition(view) != 0)  
                outRect.top = space;  
        }  
    }



然后在使用RecyclerView的地方:

int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.space);
 mRecyclerView.addItemDecoration(new SpaceItemDecoration(spacingInPixels));



Adapter填充上,再看看item就有间距了

© 著作权归作者所有

yaly
粉丝 3
博文 103
码字总数 48740
作品 0
海淀
Android工程师
私信 提问
加载中

评论(10)

yaly
yaly 博主

引用来自“shangel”的评论

兄台,我有两列数据,现在要实现左中右,有相等的space间距 | |DATA| |DATA| |

outRect.left = space;
outRect.right = space;
这样设置,结果中间的空白就是2*space了。
这个东西,跟直接用itemview的padding,效果一样。都是中间的是2*sapce
有什么好方法来解决我这个需求吗
//
放假刚回来公司~
你说的两列是不是GridLayoutManager布局?
如果是的话:
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = space;
if (parent.getChildLayoutPosition(view) % 2 == 0) {
outRect.left = 0;
outRect.right = space;
}

}

shangel
shangel
兄台,我有两列数据,现在要实现左中右,有相等的space间距 | |DATA| |DATA| |

outRect.left = space;
outRect.right = space;
这样设置,结果中间的空白就是2*space了。
这个东西,跟直接用itemview的padding,效果一样。都是中间的是2*sapce
有什么好方法来解决我这个需求吗
//
yaly
yaly 博主

引用来自“Fniy”的评论

你大爷的,误人子弟

引用来自“yaly”的评论

煞笔,很多人都觉得有用,你自己是煞笔不会用,误你妈了

引用来自“jinguol999”的评论

仅适用 LinearLayoutManager
对于网格布局:
// 网格布局,从第二列开始,left = mSpace,从第二行开始 top = mSpace
int pos = parent.getChildLayoutPosition(view);
if (pos % SPAN_COUNT != 0) {
outRect.left = mSpace;
}
if (pos >= SPAN_COUNT) {
outRect.top = mSpace;
}

引用来自“卡麦哈麦哈”的评论

你好,SPAN_COUNT这个变量从哪来的?
可以传参,也可通过LayoutManager获取
卡麦哈麦哈

引用来自“Fniy”的评论

你大爷的,误人子弟

引用来自“yaly”的评论

煞笔,很多人都觉得有用,你自己是煞笔不会用,误你妈了

引用来自“jinguol999”的评论

仅适用 LinearLayoutManager
对于网格布局:
// 网格布局,从第二列开始,left = mSpace,从第二行开始 top = mSpace
int pos = parent.getChildLayoutPosition(view);
if (pos % SPAN_COUNT != 0) {
outRect.left = mSpace;
}
if (pos >= SPAN_COUNT) {
outRect.top = mSpace;
}
你好,SPAN_COUNT这个变量从哪来的?
jinguol999
jinguol999

引用来自“Fniy”的评论

你大爷的,误人子弟

引用来自“yaly”的评论

煞笔,很多人都觉得有用,你自己是煞笔不会用,误你妈了

引用来自“jinguol999”的评论

仅适用 LinearLayoutManager
对于网格布局:
// 网格布局,从第二列开始,left = mSpace,从第二行开始 top = mSpace
int pos = parent.getChildLayoutPosition(view);
if (pos % SPAN_COUNT != 0) {
outRect.left = mSpace;
}
if (pos >= SPAN_COUNT) {
outRect.top = mSpace;
}

引用来自“yaly”的评论

79
呃,sorry,之前那样并不太符合期望,下面这个符合期望
// 设置左右间距
outRect.set(mSpace / 2, 0, mSpace / 2, 0);

// 从第二行开始 top = mSpace
if (pos >= SPAN_COUNT) {
outRect.top = mSpace;
} else {
outRect.top = 0;
}
yaly
yaly 博主

引用来自“Fniy”的评论

你大爷的,误人子弟

引用来自“yaly”的评论

煞笔,很多人都觉得有用,你自己是煞笔不会用,误你妈了

引用来自“jinguol999”的评论

仅适用 LinearLayoutManager
对于网格布局:
// 网格布局,从第二列开始,left = mSpace,从第二行开始 top = mSpace
int pos = parent.getChildLayoutPosition(view);
if (pos % SPAN_COUNT != 0) {
outRect.left = mSpace;
}
if (pos >= SPAN_COUNT) {
outRect.top = mSpace;
}
79
jinguol999
jinguol999

引用来自“Fniy”的评论

你大爷的,误人子弟

引用来自“yaly”的评论

煞笔,很多人都觉得有用,你自己是煞笔不会用,误你妈了
仅适用 LinearLayoutManager
对于网格布局:
// 网格布局,从第二列开始,left = mSpace,从第二行开始 top = mSpace
int pos = parent.getChildLayoutPosition(view);
if (pos % SPAN_COUNT != 0) {
outRect.left = mSpace;
}
if (pos >= SPAN_COUNT) {
outRect.top = mSpace;
}
yaly
yaly 博主

引用来自“Fniy”的评论

你大爷的,误人子弟
煞笔,很多人都觉得有用,你自己是煞笔不会用,误你妈了
Fniy
Fniy
你大爷的,误人子弟
每周精粹
每周精粹
1
BRVAH(让RecyclerView变得更高效) (2)

本文来自网易云社区 作者:吴思博 1.2 宫格和列表的混排样式 关于 Grid 和List 的混排样式,Grid 样式是一行有多个,而 List样式是一行只有一个。 我们可以把 List 样式看成是Grid 样式,它就...

网易云
2018/09/30
0
0
RecyclerView addItemDecoration 的妙用 - item 间距平均分布和添加分割线

前言 RecyclerView,在开发当中使用非常频繁的一个控件,今天,主要讲解以下两个问题 添加分割线 item 间距的平均分布 addItemDecoration 方法简介 我们先来看一下 addItemDecoration 方法 ...

xujun9411
04/23
0
0
Android 5.0+(RecycleView、CardView、Palette)

Android L 开发者预览支持库提供两个新的Widgets,RecyclerView和CardView。使用这两个Widgets可以显示复杂的Listview和卡片布局,这两个Widgets默认使用Material design。 RecyclerView R...

让代码飞一会
2015/07/27
1K
0
RecyclerView使用总结-------上

前言 学习使用RecyclerView也有一段时间,一直都没有时间做个总结,就抽空想把RecyclerView的一些使用方法总结出来,方便大家也方便自己查阅。 简介 RecyclerView是support.v7包中的控件,可...

CaostGrace
2018/05/15
0
0
Android ListView 相关知识小点总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jdfkldjlkjdl/article/details/82259823 给listview item 增加长方形框的背景 1.在res/drawable/下新建: 2....

hgncxzy_
2018/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker 可视化管理 portainer

官网安装指南: https://portainer.readthedocs.io/en/latest/deployment.html docker-compose.yml 位置,下载地址:https://downloads.portainer.io/docker-compose.yml...

Moks角木
31分钟前
2
0
Spring Security 实战干货:必须掌握的一些内置 Filter

1. 前言 上一文我们使用 Spring Security 实现了各种登录聚合的场面。其中我们是通过在 UsernamePasswordAuthenticationFilter 之前一个自定义的过滤器实现的。我怎么知道自定义过滤器要加在...

码农小胖哥
34分钟前
4
0
常见分布式事务解决方案

1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源...

asdf08442a
35分钟前
2
0
influxdb continuous queries(cq)从入门到放弃

从前一篇influxdb的文章prometheus基于influxdb的监控数据持久化存储方案完成之后,就一直在折腾influxdb发布测试和生产环境的问题,经过接近2个月的验证,最终发现使用influxdb自带cq的方案...

狗陈
46分钟前
7
0
7.线程通信

在现实生活中,如果一个人团队正在共同完成任务,那么他们之间应该有通信,以便正确完成任务。 同样的比喻也适用于线程。 在编程中,要减少处理器的理想时间,我们创建了多个线程,并为每个线...

Eappo_Geng
52分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部