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

如何在GridLayoutManager中设置项目的固定高度?

在GridLayoutManager中设置项目的固定高度,可以通过自定义ItemDecoration来实现。

首先,创建一个继承自RecyclerView.ItemDecoration的类,例如名为GridSpacingItemDecoration的类。在该类中,重写getItemOffsets方法,为每个项目设置上、下、左、右的偏移量。在这个方法中,可以设置项目的固定高度。

以下是一个示例代码:

代码语言:txt
复制
import android.graphics.Rect;
import android.view.View;

import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
    private int spacing;
    private int spanCount;

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

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        int position = parent.getChildAdapterPosition(view); // item position
        int column = position % spanCount; // item column

        outRect.left = spacing - column * spacing / spanCount; // 左偏移量
        outRect.right = (column + 1) * spacing / spanCount; // 右偏移量

        if (position < spanCount) {
            outRect.top = spacing; // 第一行项目的上偏移量
        }
        outRect.bottom = spacing; // 底部偏移量
    }
}

接下来,在使用GridLayoutManager的RecyclerView中,使用上述的ItemDecoration。例如:

代码语言:txt
复制
RecyclerView recyclerView = findViewById(R.id.recycler_view);
GridLayoutManager layoutManager = new GridLayoutManager(this, 2); // 设置网格布局,每行显示2列
recyclerView.setLayoutManager(layoutManager);

int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.spacing); // 定义间距的大小
recyclerView.addItemDecoration(new GridSpacingItemDecoration(spacingInPixels, 2)); // 设置ItemDecoration

在上述代码中,我们创建了一个GridSpacingItemDecoration的实例,并将其添加到RecyclerView中。该ItemDecoration可以为每个项目设置固定的高度,同时设置了项目之间的间距。

通过以上的设置,您可以在GridLayoutManager中轻松设置项目的固定高度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

方法,界面就会根据新布局刷新列表项,这个特性特别适合于手机在竖屏/横屏之间的显示切换(如竖屏时展示ListView,横屏时展示GridView),也适合在不同屏幕分辨率如手机/平板之间的显示切换(如手机上展示...默认一项占一列,如果想某项占多列,则可在此设置自定义的占位规则,即由抽象类GridLayoutManager.SpanSizeLookup派生出具体的实现类。...,第二列和第三项平分第二行,第三行开始每行有四项 // mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup()...之前我们要想实现瀑布流效果,都得自定义控件或者借助于第三方开源库如StaggeredGridView、PinterestLikeAdapterView等等;现在Android在support-v7库中推出了...StaggeredGridLayoutManager,这让我们对瀑布流效果的开发大大简化了,只要在适配器代码中动态设置每个网格的高度,系统便会自动在界面上依次排列瀑布流网格。

2.4K20
  • Android RecyclerView 使用完全解析 体验艺术般的控件

    整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果...获取到listDivider以后,该属性的值是个Drawable,在getItemOffsets中,outRect去设置了绘制的范围。onDraw中实现了真正的绘制。...可以看到,固定为4行,变成了左右滑动。有一点需要注意,如果是横向的时候,item的宽度需要注意去设置,毕竟横向的宽度没有约束了,应为控件可以横向滚动了。...其实你什么都不用做,只要使用StaggeredGridLayoutManager我们就已经实现了,只是上面的item布局我们使用了固定的高度,下面我们仅仅在适配器的onBindViewHolder方法中为我们的...item设置个随机的高度(代码就不贴了,最后会给出源码下载地址),看看效果图: ?

    1.6K10

    【Android从零单排系列二十五】《Android视图控件——RecyclerView》

    二 RecyclerView使用方法 在项目的build.gradle文件中添加RecyclerView的依赖: implementation 'androidx.recyclerview:recyclerview...android:layout_width和android:layout_height:设置RecyclerView的宽度和高度。...RecyclerView并设置适配器(例如,在MainActivity.java中): public class MainActivity extends AppCompatActivity {...增强的布局管理器(LayoutManager):RecyclerView支持不同类型的布局管理器,如线性布局、网格布局、瀑布流布局等,可以轻松实现各种列表和网格展示方式。...使用RecyclerView可以更好地管理和展示大量数据,同时也能够根据需要进行高度定制。它成为Android应用开发中常用的UI组件,广泛应用于各种应用场景,如社交媒体、新闻阅读、电子商务等。

    38010

    【RecyclerView】二、RecyclerView 简介 ( RecyclerView 特点 | RecyclerView 涉及到的类 )

    高度解耦 , 在不改变 Adapter 适配器的前提下 : 通过设置不同的 LayoutManager , 就可以实现不同的 布局展示样式 ; 通过设置不同的 ItemDecoration , 可以实现不同的...间隔样式 ; 通过设置不同的 ItemAnimator , 可以实现不同的添加 删除动画 ; 以 " 设置不同的 LayoutManager , 就可以实现不同的布局展示样式 " 为例 , 如 :...设置 LinearLayoutManager 布局管理器 , RecyclerView 展示的就是 横向 / 纵向 的列表 ; 设置 GridLayoutManager 布局管理器 , RecyclerView...并为其绑定数据 ; LayoutManager 布局管理器主要作用是 负责排列各个元素组件 , 可以使用系统提供的 线性布局管理器 LinearLayoutManager , 网格布局管理器 GridLayoutManager...用于设置每个布局元素的 间隔样式 ; ItemAnimator 用于设置布局元素的 动画效果 , 如添加动画 , 删除动画 等 ; 四、RecyclerView 相关资料 ---- 官方文档 : 使用

    5.3K00

    实现一个带有header和footer功能的RecyclerView

    RecyclerView是Android 5.0版本引入的一个新的组件,目的是在一些场景中取代之前ListView和GridView,实现性能更优的解决方案。...在WrapAdapter中我们增加一些针对header和footer的方法,如 public void addHeaderView(View header){ if...LayoutManager是GridLayoutManager时,为其设置SpanSizeLookup,并通过position判断如果是header或footer返回SpanCount(这个count是初始化...注意:这里考虑到用户也需要自定义SpanSizeLookup,所以在设置前先获取一下,如果存在则在getSpanSize中返回正确的值保证显示效果。...普通的item,由于需要判断是否是一行的最后一个isEnd(在GridLayoutManager或StaggeredGridLayoutManager中),所以要排除掉header对item位置的影响,

    1.8K20

    Android开发之漫漫长途 XV——RecyclerView

    RecyclerView提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。...中BindViewHolder绑定数据的时候为item设置了点击事件。...时,效果就不是我们所想像的那样了 //设置GridLayoutManager mRecyclerView.setLayoutManager(new GridLayoutManager(this,3));...我们知道使用GridLayoutManager的SpanSizeLookup设置某个Item所占空间 在我们的HeaderAndFooterWrapper中重写onAttachedToRecyclerView...下篇预告 下篇呢,也是一篇干货,上面两篇文章,我们的数据都是虚拟的,静态的,而实际开发中数据通常都是从服务器动态获得的,这也产生了一系列问题,如列表的下拉刷新以及上拉加载、ListVIew异步获取图片显示错位等等问题

    2.3K20

    RecyclerView addItemDecoration 的妙用 - item 间距平均分布和添加分割线

    可以影响 item 的大小,类似于在 item 中设置 padding 和 margin。...RecyclerViewDivider,已支持以下功能 自定义分割线,设置 drawable 设置分割线高度,颜色 设置分割线距离屏幕左边,右边的距离 设置是否显示最后一条分割线 详情代码见 RecyclerViewSample...recyclerView.addItemDecoration() 来实现,主要需要重写 getItemOffsets 和 onDraw 方法 思路很简单 重写 getItemOffsets,加上 divider 的高度...一般来说,可能有以下几种需求: 要求第一列和最后一列距离屏幕的距离 A 是固定的,其余每个 item 之间的距离 B 也是固定的(但 A 不等于 B 要求第一列和最后一列距离屏幕的距离 A 是固定的,item...的大小是固定的,其余每个 item 之间的距离跟随分辨率的大小变化 第一行距离顶部的距离可以设置,最后一行距离底部的距离可以设置 思路分析 首先,我们知道,对于 GridLayoutmanager ,

    6.9K41

    Android RecyclerView浅析(分类型)

    Android RecyclerView浅析 1.RecyclerView概述&简介 简单介绍: 整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同...LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。...: 方式一:在Adapter的onBindViewHolder()方法中设置,也可以定义一个接口回调,让MainAcitivity实现自定义的接口,然后在MainActivity设置接口回调的监听即可:...GridLayoutManager(this,2); // 重点在这 需要实现这个方法 manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup...position 就是我们的item位置 getSpanSize返回的值就是我们的跨列度   GridLayoutManager manager = new GridLayoutManager

    1.1K20

    RecyclerView 梳理:点击&长按事件、分割线、拖曳排序、滑动删除

    自从 RecyclerView 发布以来,由于其高度的可交互性被广泛使用。相信大家肯定对它的使用方法已经非常熟练了,今天主要是为大家总结一下较正常用法更加优雅的方式。...当然你还可以通过给 item 的最外层布局设置一个 margin 值,甚至你还可以专门在 item 布局中的适当地方添加一个高度/宽度为 1 的带背景的 View 作为 divider,这两种方法呢,确实有效果...如果设置了相关的 dragFlags,那么当长按 item 的时候就会进入拖拽并在拖拽过程中不断回调 onMove() 方法,我们就在这个方法里获取当前拖拽的 item 和已经被拖拽到所处位置的 item...//这里我们设置的颜色尽量和你 item 在 xml 中设置的颜色保持一致 viewHolder.itemView.setBackgroundColor(Color.WHITE); } 这样就能完全达到上面图片的效果了...首个 item 确实固定不能被拖曳了,可是看看下图,就会令你大跌眼睛: ?

    3.2K30

    关于RecyclerView你知道的不知道的都在这了(上)前言目录正文

    通过 setSpanSizeLookup() 方法就可以自定义为每个 item 指定它在竖直方向要占据多少个小格,最多不超过设定的行数,上述例子中每个 item 最多就只能占据 3 行的高度。...下面以两者都设置为竖直方向多列的样式来区分: 网格样式每一行中的所有 item 高度是一致的,不同行可以不一样,但同行的都是一样的,因此它就实现不了瀑布流的样式了;瀑布流所有的 item 高度都允许不一样...当设置为水平方向样式时,以上结论中行列对调,宽度高度对调。...setFullSpan() 该方法是 StaggeredGridLayoutManager 内部类 LayoutParams 的方法,用这个方法可以设置 item 是否要占据总宽度或总高度,当瀑布流中有某个...那么,在该方法回调时,这些信息还没被重置掉,官方建议我们可以在这里释放一些耗内存资源的工作,如 bitmap 的释放。

    3.2K60

    RecyclerView详解

    android:overScrollMode="never" //在代码中设置 rvView.setOverScrollMode(View.OVER_SCROLL_NEVER); 3.Adapter适配器设置...设置网格布局GridLayoutManager 日常开发经常需要有多行或多列的形式来展示各个卡位信息,而一些类似于九宫格之类的布局也可以用这个实现。只需要修改设置布局管理器即可,还是很nice的。...//设置网格布局 GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 4); //设置布局管理器 rvView.setLayoutManager...下面以两者都设置为竖直方向多列的样式来区分: 1、网格样式每一行中的所有 item 高度是一致的,不同行可以不一样,但同行的都是一样的,因此它就实现不了瀑布流的样式了;瀑布流所有的 item 高度都允许不一样...3、当设置为水平方向样式时,以上结论中行列对调,宽度高度对调。

    3K21

    基于HarmonyOS 5.0 (Next)的一种面向多设备跨平台的高性能自适应布局能力研究和实现

    你可以使用ArkUI提供的列表组件(如List),这些组件内部实现了项复用机制。当列表滚动时,只有进入或离开视窗的项会被重新渲染。...这通常涉及到跟踪每列当前的高度,并将新项添加到高度最小的列中。 动态调整:当有新数据加载或屏幕尺寸变化时,需要重新计算布局。...然而,在瀑布流中,由于列的高度是不固定的,因此这种方法可能不太适用。 结论 实现一个高性能、自适应的瀑布流组件需要考虑多个方面,包括数据的处理、组件的复用、布局的计算以及性能的优化。...// 设置条目的垂直位置为当前列的高度 // 在实际中,你可能需要更新UI组件的状态或属性来反映这一点 // 这里只是逻辑上的计算...// 设置条目的垂直位置为当前列的高度 // 在实际中,你可能需要更新UI组件的状态或属性来反映这一点 // 这里只是逻辑上的计算

    20630

    ItemTouchHelper 实现交互动画

    让item执行了两种属性动画而已,在ItemTouchHelper.Callback中有一个方法可以拿到item被拖拽或滑动时的位移变化,那就是onChildDraw()方法,在该方法中设置item渐变和缩放属性动画...并不是多出了两条空白数据,它们是正常的数据,只是看不到了,这是因为RecyclerView条目(itemView)覆用导致的,前面在onChildDraw()方法中对itemView设置了透明和缩小,而一个列表中固定只有几个...itemView而已,当那两个透明缩小的itemView被再次使用时,之前设置的透明度和高度比例已经是0,所以就出现了这种情况,解决方法也很简单,只要在item被移除后,将itemView的透明度和高度比例设置回来即可...,水平列表就是左和右) * wipeFlags:与列表滚动方向垂直的动作标识(如竖直列表就是左和右,水平列表就是上和下) * * 思路:如果你不想上下拖动,可以将 dragFlags...* * @param srcPosition 拖拽的item的position * @param targetPosition 目的地的

    3.9K20
    领券