StaggeredGridLayoutManager参数 ; 参数说明 : ① int spanCount : 网格布局行或列的个数....如果当前方向是垂直方向, 该参数设置的是行数. 如果当前方向是水平方向, 该参数设置的是列数. ② int orientation : 布局方向....当方向是 RecyclerView.VERTICAL 垂直方向时 , 网格元素排列顺序是逐行排列 , 先将第一行排满 , 然后将第二行排满 , int spanCount 参数设置的是每行的元素个数 ;...参数设置的是每列的元素个数 ; ( 古代人写字顺序 ) 构造函数原型 : /** * 创建瀑布流网格布局管理器 * * @param spanCount 如果当前方向是垂直方向...如果当前方向是水平方向, 该参数设置的是列数. * @param orientation 布局方向.
,方便开发者根据类型加载不同的布局; 4、可单独对个别项进行增删改操作,无需刷新整个列表; 下面是RecyclerView.Adapter的一个自定义类的代码例子: import com.example.exmrecycler.R...下面是GridLayoutManager的常用方法: 构造函数 : 可指定网格的列数。 setSpanCount : 单独设置网格的列数。...默认一项占一列,如果想某项占多列,则可在此设置自定义的占位规则,即由抽象类GridLayoutManager.SpanSizeLookup派生出具体的实现类。...:第一项占四列,第二列和第三项各占两列 // //如果网格的列数为四,那么第一项将占满第一行,第二列和第三项平分第二行,第三行开始每行有四项 // mLayoutManager.setSpanSizeLookup...下面是StaggeredGridLayoutManager的常用方法: 构造函数 : 可指定网格的列数和方向。 setSpanCount : 单独设置网格的列数。
优点 他可以通过设置LayoutManager来快速实现listview、gridview、瀑布流的效果,而且还可以设置横向和纵向显示,你想要控制Item间的间隔(可绘制),添加动画效果也非常简单(自带了...RecyclerView的Adapter强制要求使用ViewHolder,该ViewHolder须继承RecyclerView.ViewHolder。 对应的item布局 <?...LinearLayoutManager layoutManager = new LinearLayoutManager(this); 改为 int arrayNum = 2;//GridView样式时的列数...GridLayoutManager layoutManager1 = new GridLayoutManager(this, arrayNum); 或瀑布流() int arrayNum = 2;//GridView样式时的列数...int style = StaggeredGridLayoutManager.VERTICAL;//列垂直排布 StaggeredGridLayoutManager layoutManager1 =
方法三: RecyclerView.canScrollVertically(1) 的返回值表示是否能向上滚动,false 表示已经滚动到底部 RecyclerView.canScrollVertically...(-1) 的返回值表示是否能向下滚动,false 表示已经滚动到顶部 跨列 复杂的不规则列(有的行显示的列数多,有的行显示的列数少,并且每列显示的内容页不一样),使用 GridLayoutManager.SpanSizeLookup...的相关功能实现,新建 GridLayoutManager 的时候列数填写所有可能列数的最小公倍数。...item 的跨列数,比如第一行占两列,其他行每个 Item 占一列 return position == 0 ?...参考: 总结和分析几种判断RecyclerView到达底部的方法 RecyclerView GridLayoutManager实现复杂的列数变化的布局 Android中使用RecyclerView +
1 什么是流式布局/标签 说白了呢,就是一种参差不齐的视图,比如: 水平的流式布局 ? 垂直的流式布局 ? 多条目类型流式布局 ? 2实现方式有哪些?...实现流式布局的方式大致有如下五种: 自定义FlowLayout ChipGroups RecyclerView+StaggeredGridLayoutManager RecyclerView+FlexboxLayoutManager...我们只需要构建一个StaggeredGridLayoutManager对象,然后赋值给RecyclerView即可。...但是在构建对象时必须指定行或者列,这样就导致内容超过屏幕宽度或者高度时,并不会主动换行——而是优先适配行数或列数,然后滚动显示。...(5)、GridLayoutManager 通常情况下,GridLayoutManager用来实现固定列数/行数的网格布局,但是,通过通过调整span的数量就可以控制单个条目占几列/几行。
你想要控制其显示的方式,请通过布局管理器LayoutManager 你想要控制Item间的间隔(可绘制),请通过ItemDecoration 你想要控制Item增删的动画,请通过ItemAnimator...parent) { // 列数 int spanCount = -1; LayoutManager layoutManager = parent.getLayoutManager....getOrientation(); // StaggeredGridLayoutManager 且纵向滚动 if (orientation == StaggeredGridLayoutManager.VERTICAL...有一点需要注意,如果是横向的时候,item的宽度需要注意去设置,毕竟横向的宽度没有约束了,应为控件可以横向滚动了。 如果你需要一样横向滚动的GridView,那么恭喜你。...或者瀑布流(或者横纵屏幕切换时变化,有点意思~);显示的列数和宽度成正比。
我们先看一个效果,问题说的就是中间的Grid效果在Scrollview 嵌套recyclerview显示问题,在Android Api 24是好的,不过在5,1,1版本(api 22)缺出现了问题 最近项目中...RecycleView的类,重写OmMeasure,呵呵,但是实际上这是不行的,RecycleView是具体的一个控件,不相同与我们的ListView,这里参照之前网上的解决方案,我们可以继承自GridManager...); } private int getSpanCount(RecyclerView parent) { // 列数 int spanCount =...(); // StaggeredGridLayoutManager 且纵向滚动 if (orientation == StaggeredGridLayoutManager.VERTICAL...且横向滚动 { // 如果是最后一行,则不需要绘制底部 if ((pos + 1) % spanCount ==
android:layout_height="match_parent" android:background="@color/white" /> 如果想去掉可滑动控件滑动到边缘的光晕效果...LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //设置为垂直布局,默认是垂直的...LinearLayoutManager(this); //设置为垂直布局,默认是垂直的(垂直:LinearLayoutManager.VERTICAL,水平:LinearLayoutManager.HORIZONTAL...下面以两者都设置为竖直方向多列的样式来区分: 1、网格样式每一行中的所有 item 高度是一致的,不同行可以不一样,但同行的都是一样的,因此它就实现不了瀑布流的样式了;瀑布流所有的 item 高度都允许不一样...2、网格样式支持 item 占据多列的宽度;瀑布流支持 item 占据总列数的宽度,不支持只占据其中几列。 3、当设置为水平方向样式时,以上结论中行列对调,宽度高度对调。
电商app的首页,一般是可滑动列表,当用户上下滑动时,列表中的item可能会多次出现在屏幕上。某个item从出现到消失的过程大于某一时间(比如1s),就认为是一次曝光。...的滚动监听的两个方法,onScrollStateChanged、onScrolled。...模块标题的曝光就是模块的曝光 item内的元素是 不可滑动/可滑动列表,是不同处理方式。其中元素是不可滑动时处理得比较粗糙,可以再优化下。...三、曝光逻辑代码说明 预备知识,view可见性的判断,https://www.jianshu.com/p/30b0ae304518 1、对recyclerView的滚动监听 滚动监听的目的:滑动中item...如果item内部 是 可滑动的recyclerView,那么就item可见时 子列表也做滚定监听就可以了,即内部的recyclerView也是用setRecyclerItemExposeListener
自从 RecyclerView 发布以来,由于其高度的可交互性被广泛使用。相信大家肯定对它的使用方法已经非常熟练了,今天主要是为大家总结一下较正常用法更加优雅的方式。...当然你还可以通过给 item 的最外层布局设置一个 margin 值,甚至你还可以专门在 item 布局中的适当地方添加一个高度/宽度为 1 的带背景的 View 作为 divider,这两种方法呢,确实有效果...); } private int getSpanCount(RecyclerView parent) { // 列数 int spanCount = -...(); // StaggeredGridLayoutManager 且纵向滚动 if (orientation == StaggeredGridLayoutManager.VERTICAL...且横向滚动 { // 如果是最后一行,则不需要绘制底部 if ((pos + 1) % spanCount ==
而且 ListView 的扩展性不好,只能实现数据的纵向滚动效果,如果想要实现横向滚动的话就做不到了。 为此 Android 提供了更为强大的控件--RecyclerView。...3.6.2 实现横向滚动和瀑布流布局 Listview 的可扩展性不好,只能实现纵向滚动,如果想要横向滚动的话 ListView 就做不到了。下面用 RecyclerView 来实现横向滚动。...主要原因是RecyclerView 出色的设计,ListView 的布局排列是又自身去管理的,而 RecyclerView 的布局排列交给了 LayoutManager ,LayoutManager 有一套可扩展布局排列接口...需要注意的: 在使用瀑布布局管理器的时候,子项目的布局的宽度是由分的列数来决定的。...比如你给它传入了 3 列,则会缩小成 1 行可以容纳 3 个子项View 的宽度。
你想要控制其显示的方式,请通过布局管理器LayoutManager 你想要控制Item间的间隔(可绘制),请通过ItemDecoration 你想要控制Item增删的动画,请通过ItemAnimator...(new GridLayoutManager(this, 4, GridLayoutManager.VERTICAL, false)); 参数一:上下文; 参数二:指明行数(Horizontal),或列数...(4, StaggeredGridLayoutManager.VERTICAL)); 参数一:指明行数(Horizontal),或列数(Vertical); 参数二:指明方向; 4.给RecyclerView...(this,2); 大家看这个方法里的第二个参数,我们是不是指定了2列 而我们的头是不是返回了2然后显示了一行,没错,就是所占的列数。...也就是我们的头占了2列 第二个item往后只占一列也就是一个item占屏幕的一半。
用GridView去处理焦点是有一定挑战性的,往往会出现不可预料焦点错乱问题。这里封装了一个针对TV的RecyclerView,很方便的处理了这些事件。 首先上效果图: ?...3.设置RecyclerView的item有焦点。...按五向键,焦点会跟着一起移动 holder.itemView.setFocusable(true); 4,左右键,让RecyclerView跟着一起滚动,并获得焦点: 这里请求获取焦点的方法是: rightView.requestFocusFromTouch...7.在Recycler滚动时候去处理箭头的显示状态: ?...结束 注意在使用该控件时,要设置RecyclerView的宽度是Item的整数倍,左右箭头点击滑动的距离也要设置为RecyclerView宽度。
LayoutManager 是一个抽象类,系统已经为我们提供了三个默认的实现类,分别是 LinearLayoutManager 、 GridLayoutManager、StaggeredGridLayoutManager...瀑布流与滚动方向 前面已经介绍过,RecyclerView实现瀑布流,可以通过一句话设置:recycler.setLayoutManager(new StaggeredGridLayoutManager...其中 StaggeredGridLayoutManager 第一个参数表示列数,就好像 GridView的列数一样,第二个参数表示方向,可以很方便的实现横向滚动或者纵向滚动。...() 滚动到某个位置。...adapter封装 其实很早之前写过一篇关于 RecyclerView 适配器的封装,所以这不再赘述了,传送门:RecyclerView的通用适配器 使用 demo 可以查看:Github 【RecyclerView
image.png RecyclerView 从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传统的ListView,更加强大和灵活。...RecyclerView是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出。...RecyclerView 支持 线性布局、网格布局、瀑布流布局 三种,而且同时还能够控制横向还是纵向滚动。...(this ); //设置布局管理器 recyclerView.setLayoutManager(layoutManager); //设置为垂直布局,这也是默认的 layoutManager.setOrientation...()); 另外,系统已经为我们提供了三个相关的实现类 LinearLayoutManager(线性布局效果)、GridLayoutManager(网格布局效果)、StaggeredGridLayoutManager
例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还StaggeredGridLayoutManager...new LinearLayoutManager(this ); //设置布局管理器 recyclerView.setLayoutManager(layoutManager); //设置为垂直布局...例子1:用RecyclerView实现一个图片滚动的列表 代码如下: public class MainActivity extends ActionBarActivity { private RecyclerView...实现滚动时内容联动 例子3:RecyclerView制作相册效果 效果:在原工程的基础上进行修改,改成相册效果,即上面显示一张大图,下面的RecyclerView做为图片切换的指示器。...RecyclerView布局管理器为2列垂直排布 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(
另外ListView的可扩展性相对来说比较弱,以前要实现每个列表项的高度不同的界面,或者要完成瀑布流效果,需要非常复杂的自定义处理。...目前RecyclerView库提供了如下三种子Manager: LinearLayoutManager:展示了水平或者垂直的滚动列表,相当于之前学习的ListView,但是没有页眉和页尾。...GridLayoutManager:在网格中展示条目,相当于之前学习的GridView。 StaggeredGridLayoutManager: 在错落的网格中展示条目,比如常见的瀑布流。...从上面例子可以看出来,RecyclerView的用法并不比ListView复杂,反而更灵活好用,它将数据、排列方式、数据的展示方式都分割开来,因此可定制型,自定义的形式也非常多,非常灵活。...如果想要实现一个瀑布流,同样只需要将之前的LayoutManager换为StaggeredGridLayoutManager即可,局部代码如下: // 设置管理器 StaggeredGridLayoutManager
第一个参数是上下文, 第二个参数是图片资源, 第三个参数是ImageView控件. ---- 让RecyclerView支持更多不同布局 快速写一个带图布局: <?...) view.findViewById(R.id.iv_test); } } 然后就是修改onCreateViewHolder和onBindViewHolder部分, 区别处理文字item和带图...item, 顺带一提, 类上继承的RecyclerView.Adapter的泛型要变更, public class MyRVAdapter extends RecyclerView.AdapterRecyclerView.ViewHolder...不同布局加载 ---- 来看看横向滚动 一行代码足矣: gridLayoutManager.setOrientation(GridLayoutManager.HORIZONTAL); ?...StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL
: 给GridLayoutManager或StaggeredGridLayoutManager设置 1、可配置只在四周是否显示分割线 2、可设置header或footer不显示分割线的个数 绘制原理...* @param orientation 水平方向or垂直方向,默认SpacesItemDecoration.VERTICAL * @param headerNoShowSize 不显示分割线的...instanceof StaggeredGridLayoutManager.LayoutParams) { column = ((StaggeredGridLayoutManager.LayoutParams...null && byRecyclerView.isRefreshEnabled()) { mScrollTopFix = true; } // 滚动条置顶...,如果有一些特殊的需求在上面稍微拓展一下就好,它们收录在本人开源的一个RecyclerView开源库里:youlookwhat/ByRecyclerView。
RecyclerView是Android 5.0版本引入的一个新的组件,目的是在一些场景中取代之前ListView和GridView,实现性能更优的解决方案。...同时RecyclerView的灵活性让它可胜任更多的场景。关于RecyclerView的使用有太多的文章了,大家可以自行搜索。...由于GridLayoutManager和StaggeredLayoutManager是多列的,每个header和footer都需要独占一行,所以我们需要对这两种LayoutManager分别作一些处理。...GridLayoutManager时,为其设置SpanSizeLookup,并通过position判断如果是header或footer返回SpanCount(这个count是初始化GridLayoutMananger设置的每行的列数...普通的item,由于需要判断是否是一行的最后一个isEnd(在GridLayoutManager或StaggeredGridLayoutManager中),所以要排除掉header对item位置的影响,
领取专属 10元无门槛券
手把手带您无忧上云