首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

添加边距后,recyclerView项之间的空格也不会显示

在Android开发中,RecyclerView是一种用于展示大量数据列表的高效控件。当我们在RecyclerView的项之间添加边距时,确实会发现边距并不会直接显示出来。这是因为RecyclerView默认使用了LinearLayoutManager布局管理器,该布局管理器默认不会为项之间添加任何空白间隔。

要实现项之间的空格显示,可以通过以下两种方式来解决:

  1. 使用ItemDecoration:RecyclerView提供了ItemDecoration类,可以用于在项之间添加分割线或空白间隔。可以自定义一个继承自ItemDecoration的类,在其中重写getItemOffsets()方法,在该方法中设置项之间的边距大小。例如:
代码语言:txt
复制
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) {
        outRect.left = space;
        outRect.right = space;
        outRect.bottom = space;

        // Add top margin only for the first item to avoid double space between items
        if (parent.getChildAdapterPosition(view) == 0) {
            outRect.top = space;
        } else {
            outRect.top = 0;
        }
    }
}

然后在使用RecyclerView的地方,通过调用addItemDecoration()方法将SpaceItemDecoration应用到RecyclerView上:

代码语言:txt
复制
int space = getResources().getDimensionPixelSize(R.dimen.spacing);
recyclerView.addItemDecoration(new SpaceItemDecoration(space));
  1. 使用自定义的Item布局:另一种方法是在自定义的Item布局中直接设置项之间的边距。可以在Item布局的根布局中添加margin属性来设置边距大小。例如:
代码语言:txt
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp">

    <!-- Item布局的其他内容 -->

</LinearLayout>

通过设置根布局的margin属性,可以实现项之间的空格显示。

以上两种方法都可以实现RecyclerView项之间的空格显示,具体选择哪种方法取决于实际需求和个人偏好。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(TBC):https://cloud.tencent.com/product/tbc
  • 腾讯云物联网平台(IoT Explorer):https://cloud.tencent.com/product/ioe
  • 腾讯云移动开发平台(MTP):https://cloud.tencent.com/product/mtp
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

写给初学者Jetpack Compose教程,Lazy Layout

,接下来将它们同时显示到Text控件上即可,效果如下图所示: 设置 相信你看出来了,目前Lazy Layout并不美观,主要是因为每个子项之间没有很好,互相都糅杂在了一起,这也是Lazy...这也难怪,毕竟左侧我们设置是10dp,而右侧虽然也是10dp,但是它会再叠加第二个子项左侧,于是就变成了20dp。 最后一个子项会面临同样问题。 那么如何解决这个问题呢?...最后,我们可以不用借助Modifier.padding()来设置,Lazy Layout提供了专门给子项之间设置属性,使用Arrangement.spacedBy()即可,代码示例如下: @...,每个子项之间都会有20dp间隔,运行效果如下图所示: 当然你会发现,使用Arrangement.spacedBy()之后,第一个子项左侧和最后一个子项右侧是不会有边。...除此之外,还可以在Lazy Layout中添加item函数来指定单个数据,最终它们都会形成一个整体可滚动列表。

41810

手把手教你用RecyclerView实现猫眼电影选择效果

一、简介 在官方推出RecyclerView 控件之后,越来越多的人都使用它代替之前ListView。除了最普通列表显示RecyclerView还可以其他很多效果,例如Banner等。...第一张图片左边和最后一张右边需要大于其他图片使其保持在中间 点击某张图片时让其滑动到中间 背景实现高斯模糊 在切换当前电影时有一个背景淡入淡出效果 二、实现思路 我们一步步实现我们需求...(2)第一张图片左边和最后一张右边需要大于其他图片使其保持在中间 由于第0个item和最后一个item图片比较特殊,而其他都是默认,如果不做设置,第一张和最后一张图片就无法位于正中间...动态修改itemLayoutParams,我们不要在自定义Adapter里直接更改,官方提供了ItemDecorationapi,可以给recyclerviewitem添加装饰,我们在这里自定义一个继承...= 10 //自定义默认item var mLeftPageVisibleWidth = 125 //第一张图片左边 override fun getItemOffsets(

1.1K00

RecyclerView】 八、RecyclerView.ItemDecoration 条目装饰 ( onDraw 和 onDrawOver 绘制要点 )

大小相同 , 这里要注意 , 每一次绘制时 , 都要先获取要绘制 item 组件对应坐标 ; 这里用法与 getItemOffsets 完全不同 , 设置每个元素偏移时 , 可以获取当前序号..., 并针对不同序号代表 item 条目进行不同设置 ; Canvas 中绘图坐标系 ( 0, 0 ) 位置是 RecyclerView 左上角位置 ; 使用 Canvas 绘图时 ,...item 组件元素覆盖了 , 因此只显示出外层一圈边框 ; 三、onDrawOver 方法示例 ---- 给每个 item 条目设置上绘制一个遮罩 , 偶数序号元素绘制蓝色圆形遮罩 , 奇数序号元素上绘制红色矩形遮罩...针对不同位置设置不同 // 每排最左侧和最右侧左右边设置成 20 像素, 其余 4 个一律设置成 5 if (currentPosition % 4 ==...: 正常 item 设置都是 20 像素 , 每行最左侧距离左边 40 像素 , 每行最右侧边距离右侧 40 像素 ; ① item 底部背景 : 使用 onDraw 方法绘制 , 给每行第一个元素绘制一个底部背景

1.3K00

前端之HTML和CSS

除了显示成方块,它们一般分为下面两类: 块元素:在布局中默认会独占一行,块元素元素需换行排列。 内联元素:元素之间可以排列在一行,设置宽高无效,它宽高由内容撑开。...,注释内容不会显示在页面上,html代码中插入注释方法是: 常用html字符实体   代码中成段文字,如果文字间想空多个空格,在代码中空多个空格,在渲染成网页时只会显示一个空格,如果想显示多个空格,可以使用空格字符实体,代码如下...,叫内边,如padding:20px;padding是同时设置4个可以像border一样拆分成分别设置四个:padding-top、padding-left、padding-right、padding-bottom...margin 设置元素和外界距离,叫外边,如margin:20px;margin是同时设置4个可以像border一样拆分成分别设置四个:margin-top、margin-left、margin-right

4.3K30

RecyclerView】 十一、RecyclerView 数据更新 ( 删除单条数据 | 批量删除数据 )

: 当前 RecyclerView 列表中被移出 item 元素索引 , 也就是说之前数据集合中被移出数据索引 ; 注意 : 调用该方法 , 只会刷新与该位置相关 item 元素 , 不会刷新其它元素..., 即使数据改变了 , 不会刷新 ; 代码示例 : 删除第 0 个元素 , 后续元素会依次递进补充上去 , 有相应动画触发 ; // 删除第 0 个元素..., 只会刷新与该位置相关 item 元素 , 不会刷新其它元素 , 即使数据改变了 , 不会刷新 ; 也就是说 RecyclerView 只刷新涉及到 positionStart ~ positionStart...+ itemCount 之间这几个元素 , RecyclerView其它 item 元素不变 ; 代码示例 : 删除前 3 个数据 , 通知适配器 , 原数据集中从第 0 个元素开始...); //设置布局管理器 recycler_view.setLayoutManager(layoutManager); // 设置

3.4K00

2017年总结笔记整理

成就感瞬间充满,开心,又更有动力了; 11月发现小腹肌有了雏形,开心,工作开始适应了,虽然还是小菜鸟,但多少可以为公司做点贡献了; 11月12月事情开始多了,做菜放一了,锻炼放一了,给自己找了个借口...as调试查看线程信息.png 开启显示方法返回值 ? as调试开启方法返回值.png 不添加代码临时添加日志输出 ? as调试添加日志输出.png ? as调试日志输出.png 4....10dp 部分是被遮住了,不会显示出来。...3.RecyclerView回收复用机制 原文跳转:基于滑动场景解析RecyclerView回收复用机制原理 RecyclerView 源码实在是太复杂了,之前项目有个关于滑动问题,为了定位去看了...Q1:如果向下滑动,新一行5个卡位显示会去复用缓存 ViewHolder,第一行5个卡位会移出屏幕被回收,那么在这个过程中,是先进行复用再回收?还是先回收再复用?还是回收复用?

736110

RecyclerView】 十二、RecyclerView 数据更新 ( 修改单条数据 | 批量修改数据 )

; 注意 : 调用该方法 , 只会刷新与该位置相关 item 元素 , 不会刷新其它元素 , 即使数据改变了 , 不会刷新 ; 也就是说 RecyclerView 只刷新涉及到 position...; * 也就是说 RecyclerView 只刷新涉及到 positionStart ~ positionStart + itemCount 之间这几个元素 ,..., 这些数据不会被重新绑定 , 尽管它们位置已经发生了变化 ; 也就是说 RecyclerView 只刷新涉及到 positionStart ~ positionStart + itemCount...之间这几个元素 , 其它元素不变 ; 此外这些位置元素身份不变 , 只是绑定数据发生改变 ; 代码示例 : 修改前 3 个数据 , 通知适配器 ; // 替换第...); //设置布局管理器 recycler_view.setLayoutManager(layoutManager); // 设置

4K00

RecyclerView定制:通用ItemDecoration及全展开RecyclerView实现不同场景RecyclerView实现

Android L面世之后,Google就推荐在开发项目中使用RecyclerView来取代ListView,因为RecyclerView灵活性跟性能都要比ListView更强,但是,带来问题不少...添加一些附属信息,比如:分割线,浮层等。...所限制区域一致,绘制区域过大不仅不会显示出来,还会引起过度绘制问题: public void drawVertical(Canvas c, RecyclerView parent) {...RecyclerView--GridLayoutItemDecoration 网格式RecyclerView处理流程跟上面的线性列表类似,不过网格式需要根据每个Item位置为其设置好,比如最左面的不需要左边占位...),以及 RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams();

2.5K41

CardView那点事儿

CardView 扩展 FrameLayout 类别并让您能够显示卡片内信息,这些信息在整个平台中拥有一致呈现方式。CardView 小组件可拥有阴影和圆角。...card_view:cardCornerRadius 卡片圆角大小 card_view:contentPadding 卡片内容于间隔 card_view:contentPaddingBottom...V21+版本和之前版本仍旧具有一样计算方式 card_view:cardPreventConrerOverlap 在V20和之前版本中添加内边,这个属性为了防止内容和边角重叠 一般来说和RecyclerView...搭配起来使用效果更加~ ---- 如何使用 添加依赖 RecyclerView 与 CardView 小组件为 v7 支持内容库一部分 将这些 Gradle 依赖添加至您应用模块 dependencies...compile 'com.android.support:cardview-v7:21.0.+' compile 'com.android.support:recyclerview-v7:21.0

97720

【Android 事件分发】ItemTouchHelper 简介 ( 拖动滑动事件 | ItemTouchHelper.Callback 回调 )

方法 , 传入想要添加上下左右拖动事件 RecyclerView 对象 , 即可为该 RecyclerView 添加拖动事件 ; 添加 , 该 RecyclerView 自动可以进行上下左右拖动操作..., 用户可以自行添加相关回调 ItemTouchHelper.Callback , 响应这些事件 ; 初始化 RecyclerView 并设置 ItemTouchHelper 示例 :...false); //设置布局管理器 recycler_view.setLayoutManager(layoutManager); // 设置...方法 ; 该方法用于设置上下左右动作 , 只有在此处打开了指定方向设置 , 才可以应用具体方向拖动 , 动作有两种 , 一种是滑动 , 如左右侧滑 ; 一种是拖动 , 长按激活拖动操作 , 可用于拖动交换位置操作...false); //设置布局管理器 recycler_view.setLayoutManager(layoutManager); // 设置

1.7K10

【CSS】CSS 总结 ⑤ ( CSS 盒子边框 | CSS 盒子模型内边 | CSS 盒子模型外边 | CSS 盒子模型圆角边框 | CSS 盒子模型阴影 ) ★

没指定 具体尺寸 , 为该元素设置 Padding 内边 , 则不会撑开盒子 ; 如果 标签元素 指定了 具体尺寸 , 为其设置 Padding 内边 , 会撑开盒子 ; 三、CSS 盒子模型外边...*/ margin: 20px 30px 40px 50px; 使用 margin: auto; , 将四个都设置为 auto , 此时左右边自动就是 auto , 可以实现水平居中 ; /*...; 3、盒子水平居中设置 如果要 将一个 块级元素 盒子模型 设置为 水平居中 样式 , 需要设置以下两 : 盒子模型 宽度 必须设定 , 也就是 width 属性 ; 盒子模型 左外边...两个之和 = margin-bottom + margin-top , 而是 这两个较大值 , 即 max (margin-bottom , margin-top) , 该现象称为 外边...子元素 上外边 合并情况 , 合并 上外边为 二者之间 较大值 ; 推荐解决方案 : 为 父元素 设置 边框 或 内边 , 不要让 两个外边 互相接触 ; 为 父元素 添加 overflow

30310

【建议收藏】17个XML布局小技巧

方法什么都不绘制原因,所以不会有背景色,除非背景色是在父view里设置。...GuideLine是ConstraintLayout布局辅助对象,仅用于布局定位使用,它被标记了View.GONE,并不会显示在设备上。...如果标题是一个动态数据,默认显示app name,拿到数据再更新。...比如在“个人中心”页面需要在昵称后面给个文案提示“开通会员”,默认不显示,即android:visibility=“gone”,判断不是会员显示文案,但是在开发过程中需要调试会员和非会员两种显示效果...beginning 开始处显示分隔线 end 结尾处显示分隔线 none 不显示 其实举一反三,除了分割线,View之间间隔可以这么实现,省得每个子view都要写margin。

74810

译|CSS中间距,前端开发中各种设置间距优点缺点及实例

此外,CSS Tricks还在页底部和页顶部之间进行了投票。61%开发者更喜欢 margin-bottom 而不是 margin-top。...必须提出是,垂直方向padding对于那些具有 display:inline 元素不适用,比如 或 。如果添加了内边,它不会影响元素,内边将覆盖其他内联元素。...这是在它们之间添加空格一种可能解决方案: .grid__item { flex-basis: calc(25% - 10px); margin-left: 10px; margin-bottom...处理底部margin 假设以下组件堆叠在一起,每个组件都有底边。 ? 注意最后一个元素有一个空白,这是不正确,因为只能在元素之间。...我们是否应该根据其父显示类型(Flex,Grid)对它们进行样式设置 让我们一一解决上述问题。 调整间隔组件大小 可以创建一个接受不同变化和设置间隔。

11.9K10

深入学习下 CSS 间距相关知识

.c-nav a { display: block; padding: 16px 8px; } 对于每个项目之间间距,你可以使用或将 显示更改为 inline-block。...因此,导航宽度取决于它们内容。 以下是解决方案: 设置导航最小宽度 增加水平填充 在分隔符左侧添加额外 最简单更好解决方案是第三种,即添加一个margin-left。...我更喜欢是以下内容: 向网格添加 padding-left 将具有相同 padding-left 值负 margin-left 添加到网格父级。...处理底边 假设以下组件堆叠。 每个组件都有一个底部。 请注意,最后一个元素有边。 这是不正确,因为应该只在元素之间。...由于应用于父元素 .card__content 填充,边框不会粘在边缘上。 是的,你猜对了! 负是解决办法。

13.4K40

CSS入门?一篇就够了!

(宽高、边框样式、等)以及版面的布局等外观显示样式。...嵌套块元素垂直外边合并 对于两个嵌套关系块元素,如果父元素没有上内边及边框,则父元素上外边会与子元素上外边发生合并,合并外边为两者中较大者,即使父元素上外边为0,会发生合并...由2可以推断出,一个父盒子里面的子盒子,如果其中一个子级有浮动,则其他 子级都需要浮动。这样才能一行对齐显示。 元素添加浮动,元素会具有行内块元素特性。...对元素设置相对定位,可以通过偏移属性改变元素位置,但是它在文档流中位置仍然保留。...绝对定位和固定定位之后, 元素模式会发生转换, 都转换为 行内块模式, 因此 比如 行内元素 如果添加了 绝对定位或者 固定定位 浮动,可以不用转换模式,直接给高度和宽度就可以了。

5.2K20

Android RecyclerView实现悬浮吸顶、分隔线、到底提示效果

本文中所有效果通过ItemDecoration实现,通过此实现可以与业务解耦,让RecyclerView模板更加简洁,不关心任何辅助性ui,github地址 一、顶部吸附效果图 ?...①通过getItemOffsets()方法获取当前模板viewleft、top、right、bottom,这些留出间距用于绘制这些辅助性ui。...由于在getItemOffsets()获取不到子视图宽高,此时还没有measure,在getItemOffsets()添加高度,如果不满一屏需要在onDraw()方法中进行修正,修正方式为: 反射修改...RecyclerView.LayoutParams中mDecorInsets属性值 Field filed = RecyclerView.LayoutParams.class.getDeclaredField...在此非常感谢大家对ZaLou.Cn网站支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

1.9K20

RecyclerView零点突破(动画+边线篇)

1.2.1:定点旋转 既然分析到它是怎么动起来,当然可以改一下,比如: 注意:animateAddImpl里动画是在移动结束调用 ?...,然后添加监听,和源码保持一致 一直想做条目抖动效果,总是实现了,如果不会用ObjectAnimator童鞋,可以参见 void animateAddImpl(final ViewHolder...,对item下面的特效还是在animateMoveImpl 更新数据item特效在:animateChangeImpl()都是一个套路,这里就不赘述了 将上篇视图改改就能实现镇楼图了,这里不赘述了...其实看懂了DefaultItemAnimator,item动画不是很难 貌似有个动画库,个人感觉没有必要,拿DefaultItemAnimator稍微改几句就行了 毕竟需求是不断变动...+,itemView底部++线高) final int top = child.getBottom() + layoutParams.bottomMargin;

98320

RecyclerView】 十、RecyclerView 数据更新 ( 增加单条数据 | 批量增加数据 )

位置是被新插入 ; 该位置之前元素目前在 position + 1 位置 ; int position 参数 : 最新插入元素在数据集中位置 ; 注意 : 调用该方法 , 只会刷新与该位置相关...item 元素 , 不会刷新其它元素 , 即使数据改变了 , 不会刷新 ; 代码示例 : 在集合开始位置插入一个元素 ; // 在集合开始添加一个元素...; * 表示在数据集中其它元素仍然被认为是最新数据 , 这些数据不会被重新绑定 , * 尽管它们位置已经发生了变化 ; *...+ itemCount 位置 ; * * 这是一个结构性变化事件 ; * 表示在数据集中其它元素仍然被认为是最新数据 , 这些数据不会被重新绑定...); //设置布局管理器 recycler_view.setLayoutManager(layoutManager); // 设置

1.2K00
领券