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

在RecyclerView GridLayout中防止子对象之间出现双倍间距

,可以通过设置RecyclerView的ItemDecoration来实现。

ItemDecoration是RecyclerView提供的一个用于绘制子项之间分隔线或者空白间距的类。我们可以自定义一个ItemDecoration,并在其中重写getItemOffsets()方法来控制子项之间的间距。

以下是一个示例代码:

代码语言:txt
复制
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
    private int spanCount;
    private int spacing;
    private boolean includeEdge;

    public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.includeEdge = includeEdge;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        int position = parent.getChildAdapterPosition(view); // 获取子项的位置
        int column = position % spanCount; // 计算子项所在列数

        if (includeEdge) {
            outRect.left = spacing - column * spacing / spanCount; // 左边间距
            outRect.right = (column + 1) * spacing / spanCount; // 右边间距
            if (position < spanCount) {
                outRect.top = spacing; // 第一行顶部间距
            }
            outRect.bottom = spacing; // 底部间距
        } else {
            outRect.left = column * spacing / spanCount; // 左边间距
            outRect.right = spacing - (column + 1) * spacing / spanCount; // 右边间距
            if (position >= spanCount) {
                outRect.top = spacing; // 顶部间距
            }
        }
    }
}

使用该ItemDecoration时,可以在设置RecyclerView的LayoutManager之后调用addItemDecoration()方法来添加间距:

代码语言:txt
复制
int spanCount = 2; // 列数
int spacing = 10; // 间距
boolean includeEdge = false; // 是否包含边缘

GridSpacingItemDecoration itemDecoration = new GridSpacingItemDecoration(spanCount, spacing, includeEdge);
recyclerView.addItemDecoration(itemDecoration);

这样就可以在RecyclerView的GridLayout中防止子对象之间出现双倍间距了。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云对象存储(COS)。

  • 腾讯云云服务器(CVM):提供弹性计算能力,可根据业务需求灵活选择配置,支持多种操作系统,适用于各类应用场景。详情请参考:腾讯云云服务器
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务,适用于图片、音视频、文档等各类数据的存储和管理。详情请参考:腾讯云对象存储
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ByRecyclerView:只为改变BRVAH加载更多机制addHeaderView的问题

为了解决上面的问题,我在项目中到处打补丁,但是治标不治本,导致我不得不选择新的RecyclerView库来满足我的业务需求。...()是在一个item中操作的,导致我不能顺利使用锚点(滑动时,通过定位第一个item的位置来更改指示器)。...可设置item及子view的点击事件/长按事件 可设置任意自定义行间距(自带ItemDecoration) 结合databinding的BaseBindingAdapter(ListView的adapter.../ ListView),减少大量代码 9.Adapter结合DataBinding使用 (RecyclerView / ListView) 10.可添加万能分隔线(LinearLayout / GridLayout...布局中引用 ByRecyclerView <me.jingbin.library.ByRecyclerView android:id="@+id/recyclerView" android

1.3K20

ByRecyclerView:只为改变BRVAH加载更多机制addHeaderView的问题

为了解决上面的问题,我在项目中到处打补丁,但是治标不治本,导致我不得不选择新的RecyclerView库来满足我的业务需求。...()是在一个item中操作的,导致我不能顺利使用锚点(滑动时,通过定位第一个item的位置来更改指示器)。...可设置item及子view的点击事件/长按事件 可设置任意自定义行间距(自带ItemDecoration) 结合databinding的BaseBindingAdapter(ListView的adapter.../ ListView),减少大量代码 9.Adapter结合DataBinding使用 (RecyclerView / ListView) 10.可添加万能分隔线(LinearLayout / GridLayout...布局中引用 ByRecyclerView <me.jingbin.library.ByRecyclerView android:id="@+id/recyclerView" android

1.2K20
  • 淘宝开源库VLayout实践

    VLayout是什么,说白了就是用一个原生RecycelerView加上VLayout来实现在一个页面上比较复杂的布局并且有一个比较好的复用,在RecyclerView里同时有GridLayout布局,...ColumnLayoutHelper: 栏格布局,都布局在一排,可以配置不同列之间的宽度比值 SingleLayoutHelper: 通栏布局,只会显示一个组件View OnePlusNLayoutHelper...其他要说的就是我们初始完LinearLayoutHelper后生产DelegateAdapter.Adapter类再赋给DelegateAdapter,然后然后RecyclerView在setAdapter...img7.PNG SingleLayoutHelper: 通栏布局,只会显示一个组件View,这里建议设置Adapter个数为1,因为他就只会显示一栏,假如有多个可能会出现一些问题,本人实测个数多时会出点问题...当hasConsistItemType=false的时候,不同子adapter之间的类型不共享。 效果如下图: ?

    1.8K20

    六大布局之非常用布局

    shrinkColumns设置被收缩的列的序号 ,收缩是用于在一行中列太多或者某列的内容文本过长,会导致某列的内容会被挤出屏幕,这个属性是可以帮助某列的内容进行收缩,用于防止被挤出的。 ?...六大布局之GridLayout 简介 GridLayout(网格布局)是在Android 4.0以后引入的一种新的布局模式,和表格布局是有点类似的,但比表格布局的好,功能也是很强大的,它可以设置布局有多少行和有多少列...网格布局在实际应用中很少使用,一般都是通过系统提供的另个一个列表控件 RecyclerView。 结论 线性布局: 指子控件以水平或垂直方式排列。...相对布局: 指子控件以控件之间的相对位置或子控件相对于父容器的位置排列。 帧布局: 指所有子控件均放在左上角且后面元素直接覆盖在前面元素之上。...绝对布局: 指子控件通过绝对定位x,y位置来决定其位置摆放。 表格布局: 指以行列的形式放置子控件,每一行是一个TableRow对象或者View对象。

    1.6K10

    RecyclerView必知必会

    这里我们只针对RecyclerView,聊聊万能适配器出现的原因。...首先看构造函数,构造函数中获得系统属性android:listDivider,该属性是一个Drawable对象。...为了简化,我们将remove,move,change动画执行过程省略,只看执行add动画的过程,如下: 为了防止在执行add动画时外面有新的add动画添加到mPendingAdditions中,从而导致执行...是在创建Adapter时将实现OnStartDragListener接口的Activity对象作为参数传进来。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,在之前,一旦子View处理了触摸事件,父View就没有机会再处理这次的触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: 为了支持嵌套滑动

    4.7K20

    java swing开发窗体程序开发(一)GUI编程

    add(JMenu);//在菜单中添加子菜单 addSoearator();//添加分割线 JMeunItem: 其的双参构造方法:第一个是菜单项名字,第二个是菜单项图标 /** *...使用add(String text,Component c);//这个函数来指定选项卡名字和组件之间的对应关系 选项卡的位置在构造JTabbedPane对象时可以指定,其构造函数参数为int类型,实际是一个静态常量...其中水平盒子中添加的组件都是水平排列,垂直盒子中添加的组件都是垂直排列的 想在水平或垂直的组件间添加间距 可以在盒子中Box对象.add(Box.creatHorizontalStrut(10));...=new GridLayout(12,12);//生成格子布局对象。...buttonBox.add(loginBtn); buttonBox.add(Box.createHorizontalStrut(10));//两个按钮之间的间距

    3K30

    GridLayout和

    GridLayout布局管理器是以表格形式进行管理的,在使用此布局管理器时必须设置显示的行数和列数,GridLayout类的构造方法如表11.9所示。...布局管理器 表12.19中列举了GridLayout类的构造方法,接下来通过一个案例来演示GridLayout布局管理器的使用,如例12-18所示。...例12-18运行结果 图12.20中,运行程序创建Frame窗体后,将布局设置为使用GridLayout布局管理器,设置以两行三列布局,并设置组件之间的水平和垂直间距都为10,之后添加6个按钮到Frame...12.5.1 GridBagLayout GridBagLayout类是在GridLayout类基础上提供的更为复杂的布局管理器。...jFrame调用add()方法将两个面板添加到窗口jFrame中,jPanel1调用add()方法将三个对象添加到面板jPanel1中,将名字为jTextField的文本框显示在卡片式布局的页面上,将4

    4500

    Qt编写自定义控件47-面板区域控件

    一、前言 在很多web网页上,经常可以看到一个设备对应一个面板,或者某种同等类型的信息全部放在一个面板上,该面板还可以拖来拖去的,这个控件首次用在智能访客管理平台中,比如身份证信息一个面板,访客信息一个面板...二、实现的功能 1:支持所有widget子类对象,自动产生滚动条 2:支持自动拉伸自动填充 3:提供接口获取容器内的所有对象的指针 4:可设置是否自动拉伸宽度高度 5:可设置设备面板之间的间距和边距 三...,自动产生滚动条 * 2:支持自动拉伸自动填充 * 3:提供接口获取容器内的所有对象的指针 * 4:可设置是否自动拉伸宽度高度 * 5:可设置设备面板之间的间距和边距 */ #include...//设备表格布局 int margin; //边距 int space; //设备之间的间隔...所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator中拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。

    1.8K20

    布局管理器

    Java语言中,提供了布局管理器类的对象 管理Component在Container中的布局,不必直接设置Component位置和大小 每个Container都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时...,就会调用其对应的布局管理器,调用Container的setLayout方法改变其布局管理器对象 AWT提供了5种布局管理器类: FlowLayout BorderLayout GridLayout...,行距以及默认对齐方式(默认是居中) FlowLayout的构造方法 FlowLayout(FlowLayout.RIGHT,20,40):右对齐,组件间水平间距20,垂直间距40 FlowLayout...(FlowLayout.LEFT):左对齐,水平和垂直间距为缺省值(5) FlowLayout():使用缺省的居中对齐方式,水平和垂直间距为缺省值(5) import java.awt.*; public...组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下 在GridLayout构造方法中制定分割的行数和列数 如:GridLayout(3,4) import java.awt.*; public

    1.1K10

    【干货】20K以上的高薪Java必掌握的基础知识点(二)

    77、对于程序中可能出现的受检查异常,要么用try…catch 语句捕获并处理它,要么用 throw 语句抛出它,Java 编译器会对此做检查。...80、输入流试图要打开的文件可能不存在,就出现I/O 错误,Java 生成一个出错信号,它使用一个 IOException 对象来表示这个出错信号。...82、read 方法从输入流中顺序读取源中的单个字节数据,该方法返回字节值(0~255 之间的一个整数),如果到达源的末尾,该方法返回 -1 。...105、FlowLayout、GridLayout、BordrLayout布局对象都可以使用方法setVgap(intvgap)设置当前布局中组件的垂直间距 。...106、FlowLayout、GridLayout、BordrLayout布局对象都可以使用方法setHgap(inthgap)设置当前布局中组件的水平间距 。

    1.5K71

    已中招!Android 基础面试常常吊死在这几个问题上……

    14、面试官:Serializable和Parcelable之间有什么区别? 15、面试官:什么是(ANR)错误,如何防止它在应用程序中发生?...应聘者:我没有太深入了解… 面试官:序列化是将对象转换为字节流以便将对象存储到内存中的过程,以便可以在以后的时间重新创建它,同时仍保留对象的原始状态和数据。...此机制还倾向于创建许多临时对象,并导致相当多的垃圾回收。) 15、面试官:什么是(ANR)错误,如何防止它在应用程序中发生?...这就是为什么 RecyclerView 会利用以下事实:滚动时,新行出现在屏幕上,而旧行消失在屏幕上。代替为每个新行创建新视图,而是通过将新数据绑定到旧视图来对其进行回收和重用! 应聘者:我学到了!...RecyclerView 将列表与其容器分离,因此可以通过设置LayoutManager在运行时轻松地将列表项放在不同的容器(linearLayout,gridLayout)中。

    2K20

    Android开发笔记(一百二十二)循环器视图RecyclerView

    RecyclerView相关工程在sdk中的路径为sdk\extras\android\support\v7\recyclerview,不过幸好用它不像用Toolbar那样麻烦,要想使用Toolbar得先导入并引用...总的来说,RecyclerView.Adapter与我们之前经常遇到的BaseAdapter在处理流程上是基本一致的,当然它们之间也有不小的差异,下面是RecyclerView.Adapter和其他适配器的主要区别...方法,界面就会根据新布局刷新列表项,这个特性特别适合于手机在竖屏/横屏之间的显示切换(如竖屏时展示ListView,横屏时展示GridView),也适合在不同屏幕分辨率如手机/平板之间的显示切换(如手机上展示...之前我们要想实现瀑布流效果,都得自定义控件或者借助于第三方开源库如StaggeredGridView、PinterestLikeAdapterView等等;现在Android在support-v7库中推出了...StaggeredGridLayoutManager,这让我们对瀑布流效果的开发大大简化了,只要在适配器代码中动态设置每个网格的高度,系统便会自动在界面上依次排列瀑布流网格。

    2.4K20
    领券