在添加的时候需要动态的计算行数,以及行中剩余宽度是否可以展示目标条目。...通常情况下,与ChipGroup配套使用的是Chip——也就是ChipGroup中的条目。Chip本身具有选中和点击状态,也可以加入图片,可以修改文本(颜色、字号、字体等)。...关于Chip和ChipGroup的使用,可以参考我之前整理的《Android:Chip、ChipGroups、ChipDrawable》链接为: https://www.jianshu.com/p/d64a75ec7c74...但是在构建对象时必须指定行或者列,这样就导致内容超过屏幕宽度或者高度时,并不会主动换行——而是优先适配行数或列数,然后滚动显示。...(5)、GridLayoutManager 通常情况下,GridLayoutManager用来实现固定列数/行数的网格布局,但是,通过通过调整span的数量就可以控制单个条目占几列/几行。
还有一点细节需要注意,当使用 GridLayoutManager 时,RecyclerView 的宽高在 match_parent 和 wrap_content 两种情况下的表现完全不一样,具体表现怎样...同样的道理,当设定为 VERTICAL 竖直方向的样式时,那么可以自定义为每个 item 设定要占据的列数,最多不超过指定的列数。...gridLayoutManager); 虽然提供了该方法让网格布局可以更加多样化布局,但仍然无法满足一些场景,比如当设定为多行的样式时,此时就只支持自定义每个 item 占据的行数,只有行数!...网格样式支持 item 占据多列的宽度;瀑布流支持 item 占据总列数的宽度,不支持只占据其中几列。 当设置为水平方向样式时,以上结论中行列对调,宽度高度对调。...看了下源码注释才发现,这个方法的作用是用于根据情况是否拦截触屏事件的分发。
, false)); 参数一:上下文; 参数二:指明行数(Horizontal),或列数(Vertical); 参数三:指明方向;参数四:是否倒序; 3).瀑布流布局管理器 mRecyclerView.setLayoutManager...,然后根据常量来创建对应的ViewHolder(加载自己对应的布局文件),然后在根据类型绑定自己的对应的数据;所以每一中类型都要对应自己的ViewHolder,进而实现分类型;一般还有实现其有参构造为了传递和初始化相关数据...(this,2); 大家看这个方法里的第二个参数,我们是不是指定了2列 而我们的头是不是返回了2然后显示了一行,没错,就是所占的列数。...也就是我们的头占了2列 第二个item往后只占一列也就是一个item占屏幕的一半。...今天给大家简单的介绍了一下RecyclerView的一般用法和分类的用法,一般我们开发使用最多的也就是这两种了,希望对大家能有所帮助。 Thanks all.
列表样式出来,但是还要加分隔线啊,到这里,就需要去重写RecyclerView.ItemDecoration,可以定制各种各样的分割线。 下面是我们需求需要的分割线: ?...上面就是我们需要的分割线,我们需求需要的是第二种,list.size()%column!=0时,bottomline占满屏幕宽度。这里我顺便把不占满屏幕的bottomline也画出来了。...这里mColumn默认为3,大家可以根据需求,来随意设置你需要的mColumn的值 具体写法: public class RecyclerGridDecoration extends RecyclerView.ItemDecoration...typedArray.getDrawable(0); mTotalCount = totalCount; mColumn = column; } //bottomLine是否占满屏幕...image.setResId(R.drawable.ic_launcher); lists.add(image); } //列数
但是如果我们有这么个需求,纵屏的时候显示为ListView,横屏的时候显示两列的GridView,我们RecyclerView可以轻松搞定,而如果使用ListView去实现还是需要点功夫的~~~ 当然了...可以看到,固定为4行,变成了左右滑动。有一点需要注意,如果是横向的时候,item的宽度需要注意去设置,毕竟横向的宽度没有约束了,应为控件可以横向滚动了。...,注意这里 巧妙的使用了系统的listDivider属性,你可以尝试添加使用divider和dividerHeight属性。...通过简单改变下LayoutManager,就可以产生不同的效果,那么我们可以根据手机屏幕的宽度去动态设置LayoutManager,屏幕宽度一般的,显示为ListView;宽度稍大的显示两列的GridView...或者瀑布流(或者横纵屏幕切换时变化,有点意思~);显示的列数和宽度成正比。
列表item曝光逻辑 item的曝光:下一次上报item时,看上次上报可见的 是否不可见了。...title“more”的曝光:根据模块可见就上报可见,模块不可见就上报不可见| 无横(竖)滑的模块 的子view,根据模块可见性 全部子view都上报相同的可见性。...模块标题的曝光就是模块的曝光 item内的元素是 不可滑动/可滑动列表,是不同处理方式。其中元素是不可滑动时处理得比较粗糙,可以再优化下。...如果item内部 是 可滑动的recyclerView,那么就item可见时 子列表也做滚定监听就可以了,即内部的recyclerView也是用setRecyclerItemExposeListener...建议,调用setRecyclerItemExposeListener给recyclerView设置曝光监听的listener直接传adapter,在adapter实现回调方法,然后就可以根据回调的position
可以影响 item 的大小,类似于在 item 中设置 padding 和 margin。...实现思路 我们知道 RecyclerView 没有像之前 ListView 提供 divider 属性,设置分割线的话有挺多人在 itemView 的布局里面加个 1dp 左右的 view,根据业务场景设置是否可见...这是其中的一种方法,但其实,我们也可以使用 recyclerView.addItemDecoration() 来实现,主要需要重写 getItemOffsets 和 onDraw 方法 思路很简单 重写...一般来说,可能有以下几种需求: 要求第一列和最后一列距离屏幕的距离 A 是固定的,其余每个 item 之间的距离 B 也是固定的(但 A 不等于 B 要求第一列和最后一列距离屏幕的距离 A 是固定的,item...的大小是固定的,其余每个 item 之间的距离跟随分辨率的大小变化 第一行距离顶部的距离可以设置,最后一行距离底部的距离可以设置 思路分析 首先,我们知道,对于 GridLayoutmanager ,
(-1) 的返回值表示是否能向下滚动,false 表示已经滚动到顶部 跨列 复杂的不规则列(有的行显示的列数多,有的行显示的列数少,并且每列显示的内容页不一样),使用 GridLayoutManager.SpanSizeLookup...的相关功能实现,新建 GridLayoutManager 的时候列数填写所有可能列数的最小公倍数。...首先判断 attach 的 RecyclerView 和原来是否是一样的,一样则返回,不一样则替换 * 2....* 用返回值来检测当前 Item 的内容是否发生了变化,根据 UI 需求来改变它的返回值 * 如果用 RecyclerView.Adapter 配合 DiffUtil 使用,需要返回...参考: 总结和分析几种判断RecyclerView到达底部的方法 RecyclerView GridLayoutManager实现复杂的列数变化的布局 Android中使用RecyclerView +
本来有一个需求用recyclerView实现分页加载和元素动态宽高功能,其中分页加载通过上拉加载实现。于是看了一些文章,总结为以下的参考。 参考1....自己实现 动态列数: https://www.jianshu.com/p/178ca4c439b2 总结来讲,就是在onMeasure里根据元素的宽来动态改变GridLayoutManager的列数。...(可能会有帮助的两个函数RecyclerView#addOnScrollListener和LinearLayoutManager#findLastVisibleItemPosition) 另一个实现swipeRereshLayout...也就是说,SwipeToLoadLayout可以在多处使用。...(同理) 同上所说,item的根布局宽度应设置为"match_parent",这样就是由GridLayoutManager指定宽度。
方法,界面就会根据新布局刷新列表项,这个特性特别适合于手机在竖屏/横屏之间的显示切换(如竖屏时展示ListView,横屏时展示GridView),也适合在不同屏幕分辨率如手机/平板之间的显示切换(如手机上展示...下面是GridLayoutManager的常用方法: 构造函数 : 可指定网格的列数。 setSpanCount : 单独设置网格的列数。...默认一项占一列,如果想某项占多列,则可在此设置自定义的占位规则,即由抽象类GridLayoutManager.SpanSizeLookup派生出具体的实现类。...(3); // //以下占位规则的意思是:第一项占四列,第二列和第三项各占两列 // //如果网格的列数为四,那么第一项将占满第一行,第二列和第三项平分第二行,第三行开始每行有四项 // mLayoutManager.setSpanSizeLookup...下面是StaggeredGridLayoutManager的常用方法: 构造函数 : 可指定网格的列数和方向。 setSpanCount : 单独设置网格的列数。
3.添加了条目的点击和长按事件。 4.添加了是否第一个可见条目和是否是最后一个可见条目的方法。 5.在item获得焦点时和失去焦点时,这里有相应的回调方法。...2.使用StaggeredGridLayoutManager实现管理,如果使用GridLayoutManager会出现焦点的错乱,当使用五向键左右移动时,会从上面转移到下面。...原因是GridLayoutManager会存在分组。 ? 3.设置RecyclerView的item有焦点。...这里抽象了两个方法,当item获得焦点和失去焦点时调用。获得焦点时条目会抬高,这里是抬高了Z轴。 6.获取在第一个和最后一个可见的条目,根据这些状态去显示和隐藏左右箭头。...结束 注意在使用该控件时,要设置RecyclerView的宽度是Item的整数倍,左右箭头点击滑动的距离也要设置为RecyclerView宽度。
这样的好处是,当某一行被移出屏幕时,可以将这一行的每个卡位都回收起来,供其他行使用,而不至于每一行每次都是重新创建。...那么,开发者就可以在这些回调方法里自行判断刷新前后的 Item 的不同信息来决定是否需要进行相对应的动画。...用 GridLayoutManager 实现一个四列的布局,然后让除了四个边的 Item 外,内部的每个 Item 之间相互间隔 20 dp 的空隙。...//实现方式,以水平方向为例: //每个view的left和bottom都设置相同间隙 //去掉第1列的left,和最后一行的bottom,也就实现了除四周外内部...会根据设置的 Orientation 方向,默认为 VERTICAL 数值方向,以及 RecyclerView 的宽高模式来决定是否自动将某一方向的空隙平均分配给各 Item,这点需要注意一下。
但是 RecyclerView使用的适配器并不是之前的 BaseAdapter了。...在Adapter中必须实现的三个方法: a、//列表页需要知道有多少个条目publicintgetItemCount() b、//创建一个ViewHolder,我们可以根据viewType的不同而创建不同的...设置网格布局GridLayoutManager 日常开发经常需要有多行或多列的形式来展示各个卡位信息,而一些类似于九宫格之类的布局也可以用这个实现。只需要修改设置布局管理器即可,还是很nice的。...下面以两者都设置为竖直方向多列的样式来区分: 1、网格样式每一行中的所有 item 高度是一致的,不同行可以不一样,但同行的都是一样的,因此它就实现不了瀑布流的样式了;瀑布流所有的 item 高度都允许不一样...2、网格样式支持 item 占据多列的宽度;瀑布流支持 item 占据总列数的宽度,不支持只占据其中几列。 3、当设置为水平方向样式时,以上结论中行列对调,宽度高度对调。
如果说上面的理由只是大而空泛的话,那我们来看以下场景 你想控制数据的显示方式,列表显示、网格显示、瀑布流显示等等,之前你需要ListView,GridView和自定义View,而现在你可以通过RecyclerView...的布局管理器LayoutManager控制 你想要控制Item间的间隔(可绘制),想自定义更多样式的分割线,之前你可以设置divider,那么现在你可以使用RecyclerView的ItemDecoration...RecyclerView还有许多优势,这里就不一一列举了,总体来说现在越来越多的项目使用RecyclerView,许多老旧项目也渐渐使用RecyclerView来替代ListView。...* * 可以看出,RecyclerView将ListView中getView()的功能拆分成了onCreateViewHolder()和onBindViewHolder()。...我们这里可以看到HeaderAndFooterWrapper是继承于RecyclerView.Adapter //真正进行数据处理以及展示的Adapter mAdapter = new RecyclerViewDemo2Adapter
长点击事件 使用方式 RecyclerView 的 api 虽然没有提供 onItemClickListener 但是提供了 addOnItemTouchListener() 方法,既然可以添加触摸监听...当然你还可以通过给 item 的最外层布局设置一个 margin 值,甚至你还可以专门在 item 布局中的适当地方添加一个高度/宽度为 1 的带背景的 View 作为 divider,这两种方法呢,确实有效果...); } private int getSpanCount(RecyclerView parent) { // 列数 int spanCount = -...(ItemTouchHelper 的使用并不仅仅局限于 RecyclerView 的滑动删除,你同意可以用在其他需要拖曳滑动的地方。...() 用于设置是否处理拖拽事件和滑动事件,以及拖拽和滑动操作的方向,有以下两种情况: 如果是列表类型的 RecyclerView,拖拽只有 UP、DOWN 两个方向 如果是网格类型的则有 UP、DOWN
c:onBindViewHolder绑定数据 5:主文件中设置recyclerview的布局样式,赋值调试 1:Item xml布局文件和Bean类,ViewHolder创建。...这里的类型就简单直接写的1和2。...= (GridLayoutManager.LayoutParams) view.getLayoutParams(); //拿到grid管理器所设置的总列数 int spanSize...= layoutParams.getSpanSize(); //拿到当前所在列数 int spanIndex = layoutParams.getSpanIndex()...(gridLayoutManager); 现在运行试试吧 总结: 1:使用RecyclerView必须要写的就是适配器要继承RecyclerView.AdapterRecyclerView.ViewHolder
同时RecyclerView的灵活性让它可胜任更多的场景。关于RecyclerView的使用有太多的文章了,大家可以自行搜索。...得到了不同的type之后在create和bind就可以根据type做不同的处理,如 @Override public ViewHolder onCreateViewHolder...由于GridLayoutManager和StaggeredLayoutManager是多列的,每个header和footer都需要独占一行,所以我们需要对这两种LayoutManager分别作一些处理。...设置的每行的列数),这样就保证了header和footer可以独占一行。...所以我们这里解决一些常用的方法和使用,至于其他的解决方法类似。
RecyclerView Adapter,以前一直用原生的Adapter,然后最近项目中使用了PagedListAdapter,效果并是不太理想,所以后来又改用的BaseQuickAdapter,只能说真香...重构了些,还解决了一些BUG,不过我在刚用的时候还没研究明白3.0.4的使用,创建的有问题,所以改为了2.9.34 01 定义Bean 一共两个类,一个药品简单信息的,一个设备和对应的格数显示的,其中药品类...,这个是用来设置当前格的占比,其实从图中可以看到,实现宫格来说,一般一行不会超过6个了,所以为了每行不同的格数能够平均显示,能适配1-6都没有问题的,就要求出1-6的最小公倍数,其中2,3,5都是质数,...03 MainActivity MainActivity中没有什么特别的,最主要的就是计算生成列表。列表计算时主核心的就是怎么根据字符串进行数据处理。...= GridLayoutManager(this, colspan) recyclerview.layoutManager = gridLayoutManager recyclerview.adapter
pad上面,模块2的图片1在左边,图片2、3分布于右侧(3)折叠屏和pad上的模块2的图片,相对于直板手机来说,做了样式的调整,上下的样式改为了左右。...图片也做了对应的放大,保证横向上可以填充整个屏幕的宽度。(4)为了形象地表示处理后的效果,看下下面的示意图即可。...1)分辨率2)机型3)当前屏幕的横、竖状态先说结论: 直板手机:通过分辨率来区分 折叠屏:通过机型和内外屏状态来区分 Pad:通过机型和当前屏幕的横、竖状态来区分所以这里根据这几个特点,提供一个工具。...,以楼层4为例,楼层4的每一行商品都是一个RecyclerView,每个RecyclerView使用GridLayoutManager来控制布局的展现列数。...注意:这里的2、3数字是UI设计之初就定下来的,每行商品都是一个RecyclerView,并且使用GridLayoutManager来控制其列数,因此这个2、3也是传入到GridLayoutManager
getItemCount() 方法很简单就告诉 RecyclerView 一共有多少子项,直接返回数据源的长度就可以了。 适配器创建好,就可以使用 RecyclerView 了。...除了 LinearLayoutManger ,RecyclerView 还提供了 GridLayoutManager 和 StaggeredGrildLayoutManager 这两种内置的布局排列方式...需要注意的: 在使用瀑布布局管理器的时候,子项目的布局的宽度是由分的列数来决定的。...比如你给它传入了 3 列,则会缩小成 1 行可以容纳 3 个子项View 的宽度。...当然如果你的子项布局的宽度设置成很小,那么就不会缩小了,效果就是子View 和 子 View 之间有很大的空隙,导致不美观。
领取专属 10元无门槛券
手把手带您无忧上云