image.png StaggeredGridLayoutManager StaggeredGridLayoutManager(瀑布流布局效果),是配合RecyclerView使用的。 androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager java.util.ArrayList; public class MainActivity extends AppCompatActivity { RecyclerView mRecyclerView; StaggeredGridLayoutManager RecyclerView) findViewById(R.id.recyclerView); int spanCount = 5; mLayoutManager = new StaggeredGridLayoutManager ( spanCount, StaggeredGridLayoutManager.VERTICAL); mRecyclerView.setLayoutManager
文章目录 一、交错网格局管理器 StaggeredGridLayoutManager ( 瀑布流 ) 二、交错网格局管理器默认设置 三、交错网格局管理器水平方向设置 四、完整代码示例 五、RecyclerView ( 瀑布流 ) ---- 使用代码创建 交错网格局管理器 StaggeredGridLayoutManager, 推荐使用 StaggeredGridLayoutManager(int spanCount 创建并设置布局管理器 //创建布局管理器 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager 创建并设置布局管理器 //创建布局管理器 /*StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager 创建并设置布局管理器 //创建布局管理器 /*StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager
) { StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager ) manager; range = findRangeStaggeredGrid(staggeredGridLayoutManager); orientation = staggeredGridLayoutManager.getOrientation(); } if (range == null ) { StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager orientation = staggeredGridLayoutManager.getOrientation(); } if (range == null
) { StaggeredGridLayoutManager.LayoutParams headerParams = new StaggeredGridLayoutManager.LayoutParams ){ return ((StaggeredGridLayoutManager) layout).getOrientation() == StaggeredGridLayoutManager.VERTICAL ){ return ((StaggeredGridLayoutManager) layout).getSpanCount(); } 普通的item,由于需要判断是否是一行的最后一个isEnd(在GridLayoutManager或StaggeredGridLayoutManager中),所以要排除掉header对item位置的影响, ){ int[] positions = ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions
) { spanCount = ((StaggeredGridLayoutManager) layoutManager) .getSpanCount ) { int orientation = ((StaggeredGridLayoutManager) layoutManager) .getOrientation (); if (orientation == StaggeredGridLayoutManager.VERTICAL) { if ((pos + ) { int orientation = ((StaggeredGridLayoutManager) layoutManager) .getOrientation (); // StaggeredGridLayoutManager 且纵向滚动 if (orientation == StaggeredGridLayoutManager.VERTICAL
RecyclerView recyclerView = findViewById(R.id.recycler_view); //设置瀑布流布局管理器 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL ); recyclerView.setLayoutManager(staggeredGridLayoutManager); ArrayList<Integer> data (); 第一个参数2,表示有两列 第二个参数表示垂直滚动 //设置瀑布流布局管理器 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); 六:StaggeredGridAdapter
) { spanCount = ((StaggeredGridLayoutManager) layoutManager) .getOrientation(); // StaggeredGridLayoutManager 且纵向滚动 if (orientation == StaggeredGridLayoutManager.VERTICAL (4, StaggeredGridLayoutManager.VERTICAL)); 这两种写法显示的效果是一致的,但是注意StaggeredGridLayoutManager构造的第二个参数传一个 orientation,如果传入的是StaggeredGridLayoutManager.VERTICAL代表有多少列;那么传入的如果是StaggeredGridLayoutManager.HORIZONTAL 就代表有多少行,比如本例如果改为: mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.HORIZONTAL
layoutManager1 = new GridLayoutManager(this, arrayNum); 或瀑布流() int arrayNum = 2;//GridView样式时的列数 int style = StaggeredGridLayoutManager.VERTICAL ;//列垂直排布 StaggeredGridLayoutManager layoutManager1 = new StaggeredGridLayoutManager(arrayNum,style);
GridLayoutManager) layoutManager).findFirstVisibleItemPosition(); } if(layoutManager instanceof StaggeredGridLayoutManager ){ int[] positions = ((StaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions GridLayoutManager) layoutManager).findLastVisibleItemPosition(); } if(layoutManager instanceof StaggeredGridLayoutManager ){ int[] positions = ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions
2.使用StaggeredGridLayoutManager实现管理,如果使用GridLayoutManager会出现焦点的错乱,当使用五向键左右移动时,会从上面转移到下面。 isFirstItemVisible() { LayoutManager layoutManager = getLayoutManager(); if (layoutManager instanceof StaggeredGridLayoutManager ) { int[] firstVisibleItems = null; firstVisibleItems = ((StaggeredGridLayoutManager allItemNum) { LayoutManager layoutManager = getLayoutManager(); if (layoutManager instanceof StaggeredGridLayoutManager ) { int[] lastVisibleItems = null; lastVisibleItems = ((StaggeredGridLayoutManager
= null && lp instanceof StaggeredGridLayoutManager.LayoutParams) { StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp;
参数二:指明行数(Horizontal),或列数(Vertical); 参数三:指明方向;参数四:是否倒序; 3).瀑布流布局管理器 mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager (4, StaggeredGridLayoutManager.VERTICAL)); 参数一:指明行数(Horizontal),或列数(Vertical); 参数二:指明方向; 4.给RecyclerView ###7.3StaggeredGridLayoutManager添加头部 在adapter中重写些方法 @Override public void onViewAttachedToWindow(RecyclerView.ViewHolder = null && lp instanceof StaggeredGridLayoutManager.LayoutParams) { StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp; //设置全屏 p.setFullSpan(holder.getLayoutPosition
mrefreshLayout.setRefreshViewHolder(new BGANormalRefreshViewHolder(context, true)); data_recycleview.setLayoutManager(new StaggeredGridLayoutManager (2, StaggeredGridLayoutManager.VERTICAL)); // mrefreshLayout.beginRefreshing(); //
实现流式布局的方式大致有如下五种: 自定义FlowLayout ChipGroups RecyclerView+StaggeredGridLayoutManager RecyclerView+FlexboxLayoutManager 借助StaggeredGridLayoutManager我们可以很方便的实现流式布局/标签。 我们只需要构建一个StaggeredGridLayoutManager对象,然后赋值给RecyclerView即可。 示例代码 rv_flowImpl.adapter = mStaggerAndGvAdapter rv_flowImpl.layoutManager = StaggeredGridLayoutManager 它可以实现StaggeredGridLayoutManager不能实现的自动换行效果。
) { spanCount = ((StaggeredGridLayoutManager) layoutManager) .getSpanCount ) { int orientation = ((StaggeredGridLayoutManager) layoutManager) .getOrientation (); if (orientation == StaggeredGridLayoutManager.VERTICAL) { if ((pos + ) { int orientation = ((StaggeredGridLayoutManager) layoutManager) .getOrientation (); // StaggeredGridLayoutManager 且纵向滚动 if (orientation == StaggeredGridLayoutManager.VERTICAL
androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/LinearLayoutManager StaggeredGridLayoutManager 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/StaggeredGridLayoutManager
简单使用 LinearLayoutManager 线性管理器(支持横向、纵向) GridLayoutManager 网格布局管理器 StaggeredGridLayoutManager 瀑布流式布局管理器 ) { spanCount = ((StaggeredGridLayoutManager) layoutManager) .getSpanCount ) { int orientation = ((StaggeredGridLayoutManager) layoutManager) .getOrientation (); if (orientation == StaggeredGridLayoutManager.VERTICAL) { if ((pos + (); // StaggeredGridLayoutManager 且纵向滚动 if (orientation == StaggeredGridLayoutManager.VERTICAL
目前有三种,分别是:线性布局管理器LinearLayoutManager、网格布局管理器GridLayoutManager、瀑布流网格布局管理器StaggeredGridLayoutManager。 new DefaultItemAnimator()); rv_grid.addItemDecoration(new DividerGridItemDecoration(this)); } } StaggeredGridLayoutManager 之前我们要想实现瀑布流效果,都得自定义控件或者借助于第三方开源库如StaggeredGridView、PinterestLikeAdapterView等等;现在Android在support-v7库中推出了StaggeredGridLayoutManager 下面是StaggeredGridLayoutManager的常用方法: 构造函数 : 可指定网格的列数和方向。 setSpanCount : 单独设置网格的列数。 ; public class StaggeredActivity extends Activity { private RecyclerView rv_staggered; private StaggeredGridLayoutManager
2、 GridLayoutManager 网格布局管理器 3、 StaggeredGridLayoutManager 瀑布流式布局管理器 基本用法 1.引入依赖 implementation 'com.android.support *设置竖直瀑布流布局StaggeredGridLayoutManager * 这里同样还是修改设置布局管理器即可,秒秒钟的事情 ? : //设置竖直瀑布流布局 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager( 4, StaggeredGridLayoutManager.VERTICAL); //设置布局管理器 rvView.setLayoutManager(staggeredGridLayoutManager
recyclerView = findViewById(R.id.rv); // 需要自定义布局才可以使用 如:LinearLayoutManager、网格GridLayoutManager、瀑布流StaggeredGridLayoutManager LinearLayoutManager(this); // GridLayoutManager viewManager = new GridLayoutManager(this,3); StaggeredGridLayoutManager viewManager = new StaggeredGridLayoutManager(3, LinearLayout.VERTICAL); // 布局对象绑定自定义布局(不绑定就没有外观