LayoutManager是一个抽象类,系统提供了继承它的LinearLayoutManager,GridViewLayoutManager,StaggeredGridLayoutManager三种LayoutManager 首先来看看LinearLayoutManager是怎么实现绘制的。 确定锚点 所谓锚点,在这里就是指最先定位的那一个item,锚点相关信息在LinearLayoutManager中用AnchorInfo类表示 static class AnchorInfo { boolean mLayoutFromEnd; //是否从底部往上布局,在本文讨论的场景中,值都为false boolean mValid; //anchor信息是否设置完毕 ... } LinearLayoutManager minX, minY, maxX, maxY); setMeasuredDimension(mRecyclerView.mTempRect, widthSpec, heightSpec); } LinearLayoutManager
文章目录 一、线性布局 1、线性布局管理器 LinearLayoutManager 2、垂直不翻转代码示例 3、水平翻转代码示例 二、完整代码示例 三、RecyclerView 相关资料 本篇博客主要讨论设置不同的布局管理器 使用代码创建 线性布局管理器 LinearLayoutManager , 推荐使用 LinearLayoutManager(Context context, @RecyclerView.Orientation int orientation, boolean reverseLayout) 构造函数 , 可以使用一行代码设置基本的 LinearLayoutManager 参数 ; 参数说明 : ① Context LinearLayoutManager(this, RecyclerView.VERTICAL, false); // 横向设置 , 翻转 LinearLayoutManager LinearLayoutManager(this, RecyclerView.VERTICAL, false); // 横向设置 , 翻转 //LinearLayoutManager
条件: LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext); linearLayoutManager.setOrientation (LinearLayoutManager.HORIZONTAL); // 水平,本文以此为例 linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL = null) { View leftView = linearLayoutManager.getChildAt(0); //获取可视的第一个view if (leftView 代码实现 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); linearLayoutManager.setOrientation (LinearLayoutManager.HORIZONTAL); recyclerView.setLayoutManager(linearLayoutManager); onScrollListener
随意示范一下 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL , false); mRecyclerView.setLayoutManager(linearLayoutManager); 上面用的是LinearLayoutManager的第二个构造方法 * @param reverseLayout When set to true, layouts from end to start. */ public LinearLayoutManager (mContext)); /** * Creates a vertical LinearLayoutManager * * @param context Current context, will be used to access resources. */ public LinearLayoutManager(Context context) {
() -> LinearLayoutManager.fill() -> LinearLayoutManager.layoutChunk() -> LinearLayoutManager.LayoutState.next ()-> RecyclerView.Recycler.getViewForPosition() LinearLayoutManager.layoutForPredictiveAnimations()-> LinearLayoutManager.fill() -> LinearLayoutManager.layoutChunk() -> LinearLayoutManager.LayoutState.next ()-> RecyclerView.Recycler.getViewForPosition() LinearLayoutManager.scrollBy()-> LinearLayoutManager.fill () -> LinearLayoutManager.layoutChunk() -> LinearLayoutManager.LayoutState.next()-> RecyclerView.Recycler.getViewForPosition
1、 LinearLayoutManager 现行管理器,支持横向、纵向。 是用来做列表布局,也就是单列的列表 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //设置为垂直布局,默认是垂直的(垂直:LinearLayoutManager.VERTICAL,水平:LinearLayoutManager.HORIZONTAL) linearLayoutManager.setOrientation 水平RecyclerView: //LinearLayoutManager是用来做列表布局,也就是单列的列表 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); //设置为垂直布局,默认是垂直的(垂直:LinearLayoutManager.VERTICAL,水平:LinearLayoutManager.HORIZONTAL
layoutManager; public PaginationScrollListener(LinearLayoutManager layoutManager) { this.layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); rv.setLayoutManager(linearLayoutManager linearLayoutManager; RecyclerView rv; ProgressBar progressBar; // 分页开始的索引(0是我们的第一页) = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); rv.setLayoutManager(linearLayoutManager 但是现在,它的构造函数只支持LinearLayoutManager。
linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); mScrollListener private Items mItems; private final LoadMore mLoadMore = new LoadMore(); private LinearLayoutManager MultiTypeAdapter mMultiTypeAdapter; ScrollListener(MultiTypeAdapter multiTypeAdapter, Items datas, LinearLayoutManager linearLayoutManager, OnLoadMoreListener onLoadMoreListener) { mItems = datas; mMultiTypeAdapter = multiTypeAdapter; this.mLinearLayoutManager = linearLayoutManager;
rv_shop_bag_list}, adapter:com.lpf.demo.order.adapter.MyAdapter@5f994d1, layout:android.support.v7.widget.LinearLayoutManager widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854) at android.support.v7.widget.LinearLayoutManager $LayoutState.next(LinearLayoutManager.java:2230) at android.support.v7.widget.LinearLayoutManager.layoutChunk (LinearLayoutManager.java:1557) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java :1517) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java
代码如下: LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL , false); recyclerView.setLayoutManager(linearLayoutManager); new LinearSnapHelper(). attachToRecyclerView RecyclerView.LayoutManager layoutManager, OrientationHelper helper) { if (layoutManager instanceof LinearLayoutManager ) { int firstChild = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); int lastChild = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition(); if (firstChild == RecyclerView.NO_POSITION
widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4967) at android.support.v7.widget.LinearLayoutManager $LayoutState.next(LinearLayoutManager.java:2029) at android.support.v7.widget.GridLayoutManager.layoutChunk (GridLayoutManager.java:541) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java :1377) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:
import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL ); mRecyclerView.setLayoutManager(linearLayoutManager); //设置适配器 mAdapter = new linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL ); mRecyclerView.setLayoutManager(linearLayoutManager); mAdapter = new GalleryAdapter
R.drawable.l)); mRecyclerView = (MyRecyclerView) findViewById(R.id.id_recyclerview_horizontal); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL ); mRecyclerView.setLayoutManager(linearLayoutManager); mAdapter = new GalleryAdapter(this, mDatas linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL );//设置方向水平 mRecyclerView.setLayoutManager(linearLayoutManager); mAdapter = new GalleryAdapter(
创建布局管理器 mLlm = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); //4.!!! )); mRecyclerView.addItemDecoration(//竖线 new RecycleViewDivider(this,LinearLayoutManager.VERTICAL 或LinearLayoutManager.HORIZONTAL private static final int[] ATTRS = new int[]{android.R.attr.listDivider = LinearLayoutManager.VERTICAL && orientation ! = LinearLayoutManager.HORIZONTAL) { throw new IllegalArgumentException("请输入正确的参数!")
package com.wusy.wusylibrary.base; import android.content.Context; import android.support.v7.widget.LinearLayoutManager firstVisibleItem, visibleItemCount, totalItemCount; private int currentPage = 1; private LinearLayoutManager mLinearLayoutManager; public LoadMoreRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager ) { this.mLinearLayoutManager = linearLayoutManager; } @Override
RecyclerView.LayoutManager manager = mRecyclerView.getLayoutManager(); if (manager instanceof LinearLayoutManager ) { LinearLayoutManager linearLayoutManager = (LinearLayoutManager) manager; range = findRangeLinear(linearLayoutManager); orientation = linearLayoutManager.getOrientation ) { LinearLayoutManager linearLayoutManager = (LinearLayoutManager) manager; range = findRangeLinear(linearLayoutManager); orientation = linearLayoutManager.getOrientation
android.os.Bundle; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager R.layout.activity_main); recyclerView = findViewById(R.id.recycler_view); //创建线性布局管理器,方向垂直 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); // recyclerView设置布局管理器 recyclerView.setLayoutManager(linearLayoutManager); MonitorAdapter
1.1 LinearLayoutManager 线性布局,用它可以来实现横竖自由切换的线性布局,先来看看它的构造函数: public class LinearLayoutManager extends 竖直LinearLayoutManager示例.png 在 Tv 应用中,这种竖直方向的 LinearLayoutManager 使用场景大多都是用于显示菜单项,使用频率并不是特别高,但在手机应用中,这种的使用频率算是特别高的了 layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); mRecyclerView.setLayoutManager 其实想想也很容易理解,GridLayoutManager 是继承自 LinearLayoutManager,只是在它基础上补充了 spanCount 概念,滑动的实现还是延用 LinearLayoutManager setSpanCount() 通过构造函数指定了 spanCount 后也还可以继续通过该方法进行修改 LinearLayoutManager 的方法 由于是继承关系,所有 LinearLayoutManager
R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.recyclerView); //LinearLayoutManager 能够自己定义实现不同的动画效果和布局效果 //这里设置为LinearLayoutManager.HORIZONTAL变成为了一个能够横向滑动的ListView,赞不赞? LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); RecyclerView通过(RecyclerView) findViewById(R.id.recyclerView)初始化之后,不仅要像ListView一样要放入Adapter进行数据和布局的适配,并且还要额外加入一个LinearLayoutManager 通过自己定义LinearLayoutManager也能够实现不同的动画效果,和移动效果。 RecyclerView的Adapter和ListView的Adapter也是不同的。
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); //设置为Listview样式 LinearLayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); RecylcerView设置adapter recyclerView.setAdapter(adapter); 这里将Recycler设置成了ListView样式,若需要GridView样式只需要将 LinearLayoutManager layoutManager = new LinearLayoutManager(this); 改为 int arrayNum = 2;//GridView样式时的列数 GridLayoutManager ); //横向显示 layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 完成一次RecyclerView的简单使用,来看看效果