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

如果recyclerview的列表大小为奇数,则将第一项居中(GridLayoutManager)

RecyclerView是Android开发中常用的列表控件,用于展示大量数据并支持滚动。GridLayoutManager是RecyclerView的一种布局管理器,可以将列表以网格的形式展示。

如果RecyclerView的列表大小为奇数,并且使用GridLayoutManager布局管理器,可以通过设置SpanSizeLookup来实现将第一项居中显示。SpanSizeLookup是GridLayoutManager的一个内部类,用于设置每个列表项的跨度大小。

以下是实现将第一项居中的步骤:

  1. 创建GridLayoutManager对象,并设置列数为奇数,例如3列。
代码语言:txt
复制
GridLayoutManager layoutManager = new GridLayoutManager(context, 3);
  1. 创建SpanSizeLookup对象,并重写getSpanSize方法,设置第一项的跨度大小为列数的倍数,其他项的跨度大小为1。
代码语言:txt
复制
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        return position == 0 ? layoutManager.getSpanCount() : 1;
    }
});
  1. 将GridLayoutManager设置给RecyclerView。
代码语言:txt
复制
recyclerView.setLayoutManager(layoutManager);

通过以上步骤,当RecyclerView的列表大小为奇数时,第一项会居中显示,其他项会按照正常的网格布局显示。

推荐的腾讯云相关产品:腾讯云移动直播(https://cloud.tencent.com/product/mlvb),该产品提供了音视频直播的解决方案,可用于实时直播、互动直播等场景。

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

相关·内容

【RecyclerView】 十四、GridLayoutManager 网格布局管理器 ( GridLayoutManager.SpanSizeLookup 指定 item 元素占用网格个数 )

文章目录 一、修改单条数据 二、完整代码示例 三、总体运行效果 四、RecyclerView 相关资料 一、修改单条数据 ---- GridLayoutManager.SpanSizeLookup 的主要作用是设置每个...item 元素占据网格布局的格子数量 ; 默认每个 item 元素占 1 个格子 ; GridLayoutManager.SpanSizeLookup 使用流程 : ① 自定义类 : 自定义 GridLayoutManager.SpanSizeLookup...; ④ 刷新 UI : 调用 RecyclerView.Adapter 的 notifyDataSetChanged 方法即可刷新 UI ; 设置效果一 : 第一个元素占 4 个格子 , 第二个元素占...RecyclerView 列表 */ private RecyclerView recycler_view; /** * 网格布局管理器 */ private...相关资料 ---- 官方文档 : 使用 RecyclerView 创建动态列表 : https://developer.android.google.cn/guide/topics/ui/layout

1.6K00

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

下面是LinearLayoutManager的常用方法: 构造函数 : 可指定列表的方向与是否为相反方向开始布局。 setOrientation : 单独设置列表的方向。...setReverseLayout : 单独设置是否为相反方向开始布局。默认false,如果设置为true,那么垂直方向将从下往上开始布局,水平方向将从右往左开始布局。...默认一项占一列,如果想某项占多列,则可在此设置自定义的占位规则,即由抽象类GridLayoutManager.SpanSizeLookup派生出具体的实现类。...(3); // //以下占位规则的意思是:第一项占四列,第二列和第三项各占两列 // //如果网格的列数为四,那么第一项将占满第一行,第二列和第三项平分第二行,第三行开始每行有四项 // mLayoutManager.setSpanSizeLookup...setReverseLayout : 设置是否为相反方向开始布局。默认false,如果设置为true,那么垂直方向将从下往上开始布局,水平方向将从右往左开始布局。

2.4K20
  • 关于RecyclerView你知道的不知道的都在这了(下)目录正文

    移出屏幕的 ViewHolder 会被缓存到两个容器中,按优先级高到低分别是:mCachedViews 和 mRecyclerPool 该方法就是用于设置 mCachedViews 容器的大小,默认值为...2,可通过该方法随时改变缓存容器的大小。...应用场景: 我们来举个例子,就不用官方给的例子了,我额外补充一种场景:界面上存在多行可分别左右滑动的列表控件,即每行是一个 RecyclerView,每行里的 Item 布局样式一致,这时候就可以让每一行的...时,只有一个方向会生效,那么下面我们就以 GridLayoutManager 为例,来看看,如何自定义写 ItemDecoration。...但其实,滑动策略也是支持多样化的。 比如,如果想要实现不管以多大的加速度滑动,滑多长距离,最终停下来时都系统有个 ItemView 是居中显示的效果。

    1.3K30

    曝光埋点方案:recyclerView中的item曝光逻辑实现

    数据分析同事对这些曝光数据的分析,可用于针对用户进行商品喜好的推荐。 那如何实现 列表(recyclerView)中item的曝光埋点呢?...有横(竖)滑的模块 的子view:若模块可见,就上报 当前子列表中 的可见子模块 ;同时处理子列表滑动时的item可见性;模块不可见,那当前子列表的可见view上报不可见。...item上报可见时,如果已经之前上报可见了,就不上报;上报不可见时,如果上次上报了可见,才上报。 模块标题的曝光就是模块的曝光 item内的元素是 不可滑动/可滑动列表,是不同处理方式。...如果item内部 是 可滑动的recyclerView,那么就item可见时 子列表也做滚定监听就可以了,即内部的recyclerView也是用setRecyclerItemExposeListener...的item可见状态的监听 * @param recyclerView recyclerView * @param onExposeListener 列表中的item可见性的回调

    5.8K10

    Android:流式布局实现总结

    RecyclerView+GridLayoutManager+Span 3实现方式分析 (1)、自定义FlowLayout 关于自定义FlowLayout,原理就是自定义一个ViewGroup,向里动态的添加条目...官方为我们封装好的一套流式标签组件.ChipGroup 本质上也是自定义的ViewGroup,其中为我们封装了部分条目点击和选中的监听器。...所以,在这中方式下,如果我们想要实现超过宽度或者高度就主动换行的效果就做不到了。...假设我们要实现一个宽度满屏之后自动换行的流式标签列表,我们将span总数设置为屏幕宽度,那么,每一个条目所占的span即为该条目的宽度(含marign、padding). .../10 9:22 AM 配置字体大小,大小需要与条目xml中配置的一致        textPaint.textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP

    5.2K20

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

    和 onDrawOver 绘制要点 ---- onDraw 和 onDrawOver 方法原理类似 , 都是基于 Canvas 进行绘制 , 这个 Canvas 的画布大小与 RecyclerView...大小相同 , 这里要注意 , 每一次绘制时 , 都要先获取要绘制的 item 组件对应的坐标 ; 这里的用法与 getItemOffsets 完全不同 , 设置每个元素的边距偏移时 , 可以获取当前的序号...对象相对于父容器 RecyclerView 的坐标值 , 也就是左上右下四个坐标 ; ⑤ 根据获取的坐标值进行绘图 ; 绘图代码示例 : 以 onDraw 方法为例 , onDrawOver 的绘图逻辑类似..., 奇数序号的元素上绘制红色矩形遮罩 ; 该方法中绘制的元素覆盖 item 组件元素 ; 四、完整代码示例 ---- RecyclerView.ItemDecoration 代码示例 : package...; 五、RecyclerView 相关资料 ---- 官方文档 : 使用 RecyclerView 创建动态列表 : https://developer.android.google.cn/guide

    1.4K00

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

    setSpanSizeLookup() 通常情况下,网格布局样式下,每个小格的大小基本都是一样的,但如果我们想实现如下的效果呢: ?..., false); //自定义item占据的小格大小时需要重写 getSpanSize(),返回值就是占据的小格数量 gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup...就以上上图的布局为例,来看下打出来的日志: ? 日志.png 得到的结果是个数组,数组的大小就是构造方法中传入的 spanCount。...我想了想,还是想不出比较合理的解释,大概硬套了下,感觉也许是因为瀑布流的布局下是没办法确定 item 的大小的,如果还像 LinearLayoutManager 只寻找首个或末个完全可见的 item 时...如果模式为 wrap_content,那这个方法就不要用了。

    3.2K60

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

    如果说上面的理由只是大而空泛的话,那我们来看以下场景 你想控制数据的显示方式,列表显示、网格显示、瀑布流显示等等,之前你需要ListView,GridView和自定义View,而现在你可以通过RecyclerView...注:当我们想要一个列表显示控件的时候,需要支持动画,或者频繁更新,局部刷新,建议使用RecyclerView,更加强大完善,易扩展;其他情况下ListView在使用上反而更加方便,快捷。...RecyclerView继承了ViewGroup,并重写了measureChild(),该方法在onMeasure()中被调用,用来计算每个child的大小,计算每个child大小的时候就需要加上getItemOffsets...= null) {//如果以viewType为key获取的View为null //创建ViewHolder并返回 ViewHolder...= null) {//如果以viewType为key获取的View为null //创建ViewHolder并返回 ViewHolder holder = new

    2.3K20

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

    如果是正常的item,直接调用外部adapter的对应方法;如果是header和footer,在对应标识上要减去该header或footer在对应的list中的位置,下面就会解释这样做的原因。...设置的LayoutManager是GridLayoutManager时,为其设置SpanSizeLookup,并通过position判断如果是header或footer返回SpanCount(这个count...在列表中我们经常会用到divider,RecyclerView并不像ListView那样可以很简单的添加divider,需要用户自定义一个ItemDecoration。...通过上面的处理,header和footer的功能基本完善了,如果遇到其他问题,可以参照上面两种情况进行处理。 下拉刷新 最后我们再为这个RecyclerView实现下拉刷新和加载更多功能。...,判断是否已经到列表顶部或底部,如果到顶部或底部就会执行下拉/上拉的操作了。

    1.8K20

    为RecyclerView添加下拉刷新功能

    前言 在之前的文章中,我们实现了带有header和footer功能的WrapRecyclerView:实现一个带有header和footer功能的RecyclerView 现今App中列表的下拉刷新和上拉加载已经是一种习惯了...为RecyclerView添加这个功能可以通过多种方法,这里我选用了一种简单的做法。基于pulltorefresh这个库。...,判断是否已经到列表顶部或底部,如果到顶部或底部就会执行下拉/上拉的操作了。...); return recyclerView; } 这个方法就是创建一个WrapRecyclerView,注意不要忘了setId,否则在Fragment中使用会出现一些问题(回收重建的时候...实现效果如下 如果想改变显示或风格,可以通过pulltorefresh库的api来实现,关于pulltorefresh库的使用大家可以自行查阅相关文档。

    88250

    RecyclerView实现拖拽排序和侧滑删除

    在平时开发应用的时候,经常会遇到列表排序、滑动删除的需求。...如果列表效果采用的是 ListView 的话,需要经过自定义 View 才能实现效果;但是如果采用的是 RecyclerView 的话,系统 API 就已经为我们提供了相应的功能。...GridLayoutManager ,那么拖拽排序就可以细分为上下左右四个方向了,而且 GridLayoutManager 没有侧滑删除的功能; 若是其他的 LayoutManager ,比如说 LinearLayoutManager...,那么拖拽排序就只有上下两个方向了,并且设置 swipeFlag 为 ItemTouchHelper.END 类型; 对于其他自定义类型的 LayoutManager 可以自己根据自身情况补充。...所以关于列表排序的代码应该写在这里。方法参数中的 viewHolder 代表的是用户当前拖拽的 item ,而 target 代表的是被用户拖拽所覆盖的那个 item 。

    1.1K30

    解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题

    我们先看一个效果,问题说的就是中间的Grid效果在Scrollview 嵌套recyclerview显示问题,在Android Api 24是好的,不过在5,1,1版本(api 22)缺出现了问题 最近项目中...以前在ScrollView中嵌套嵌套ListView,无法正确的计算ListView的大小,现在我们在ScrollView中嵌套嵌套RecycleView的时候,也出现了计算不出高度的问题,于是有人想到我们是不是可以自己实现一个重写一个继承自...RecycleView的类,重写OmMeasure,呵呵,但是实际上这是不行的,RecycleView是具体的一个控件,不相同与我们的ListView,这里参照之前网上的解决方案,我们可以继承自GridManager...,然后对OnMeasure重写,其他的列表效果如此, public class WrappingGridLayoutManager extends GridLayoutManager {...instanceof GridLayoutManager) { spanCount = ((GridLayoutManager) layoutManager).getSpanCount

    3.4K50

    Android RecyclerView浅析(分类型)

    ItemDecoration 我们可以通过该方法添加分割线: mRecyclerView.addItemDecoration() 该方法的参数为RecyclerView.ItemDecoration,该类为抽象类...,官方目前并没有提供默认的实现类(我觉得最好能提供几个) 提示:如果布局管理器里面设置的Horizontal就是行,如果是Vertical就是显示几列。...,参数三:是否为倒序排列; 2).网格布局管理器: mRecyclerView.setLayoutManager(new GridLayoutManager(this, 4, GridLayoutManager.VERTICAL...,然后设置Adapter的泛型为当前的ViewHolder,如果有不一样的就要重写其方法 关于其几个方法的说明: class MyAdapter extends RecyclerView.Adapter...如果root为null,attachToRoot将失去作用,设置任何值都没有意义。 2.

    1.1K20

    由旋转画廊,看自定义RecyclerView.LayoutManager

    想起旋转画廊的效果不是和横向滚动列表非常相似吗?那么是否可以利用RecycleView实现呢?...该控件具有高度灵活、高度解耦的特性,并且还提供了添加、删除、移动的动画支持,分分钟让你作出漂亮的列表、九宫格、瀑布流。相信使用过该控件的人必定爱不释手。...//计算第一个Item Y轴的启始位置坐标,这里为控件竖直方向居中 mStartY = Math.round((getVerticalSpace() - mDecoratedChildHeight...() * 0.5)) { //如果大于半个Item间距,则下一个Item居中 scrollN ++; } //计算最终的滚动距离 int finalOffset...接着,在getChildDrawingOrder()中,childCount为当前已经显示的Item数量,i为item的位置。 旋转画廊中,中间位置的优先级是最高的,两边item随着递减。

    2.9K51

    RecyclerView实现混合布局

    方法: 你可以写多个list来存放不同的数据,但是如果是多个的话,返回的数据就一串字符串,你不仅要挑出来,还要存放在多个list里面,下次下拉刷新时还要在多个list中累加数据,这样就有点麻烦了 不挑出来直接就只判断...指定一个布局格式,下面是指定了布局格式,一共两列,获取一开始咱们设置的type,如果type=2,则要让他独自占2列,也就是说,他自己一行。...) { return 2; } return 1; } }); 装饰可写可不写 //设置各个item的装饰,如间距,大小等,可写可不写,不写可以在...(gridLayoutManager);  现在运行试试吧 总结: 1:使用RecyclerView必须要写的就是适配器要继承RecyclerView.AdapterRecyclerView.ViewHolder...在activity中加载recyclerview时,要加入布局样式,比如说,普通的LinearLayoutManager,或者GridLayoutManager,StaggeredGridLayoutManager

    2.3K20
    领券