LayoutManager是一個抽象類冤竹,有3個子類:
LinearLayoutManager: 線性布局管理器 GridLayoutManager: 表格布局管理器 StaggeredGridLayoutManager: 瀑布流布局管理器
LinearLayoutManager
LinearLayoutManager 是線性布局管理器岭皂,使用頻率是最高的谈为,展示的樣式跟listview一模一樣脓规。 該類有3個構(gòu)造方法:
LinearLayoutManager(Context context)
LinearLayoutManager(Context context,int orientation,boolean reverseLayout)
LinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr,int defStyleRes)
第一個構(gòu)造方法內(nèi)部調(diào)用了第二個構(gòu)造方法,第二個構(gòu)造方法參數(shù)的含義:
Context context
:上下文禁灼,初始化時谤绳,構(gòu)造方法內(nèi)部加載資源用int orientation
:方向,垂直(RecyclerView.VERTICAL)和水平(RecyclerView.HORIZONTA )塌计,默認為垂直.-
boolean reverseLayout
:是否倒序挺身,設(shè)置為True,從最后一個item開始锌仅,倒序加載章钾。此時,RecyclerView第一個item是添加進Adapter中的最后一個热芹,最后一個item是第一個加進Adapter的數(shù)據(jù),RecyclerView會自動滑到末尾贱傀,另外item整體是依靠下方的。如下
在這里插入圖片描述
orientation也可以通過manger.setOritation()設(shè)置 reverseLayout伊脓,也可以通過manager.setReverseLayout()設(shè)置府寒。setStackFromEnd(boolean stackFromEnd)
當設(shè)置為true時,列表便會從底部開始展示內(nèi)容,RecycelrView會自動滑倒尾部株搔。 這個方法和manager.setReverseLayout(true)共同點就是都自動滑動尾部剖淀,RecyclerView默認會展示末尾的item。差別在于纤房,manager.setStackFromEnd(true)不會影響內(nèi)部的數(shù)據(jù)順序纵隔,怎么添加進Adapter的,就怎么展示炮姨。
scrollToPosition(int position)
滑動到指定item linearLayoutManager.scrollToPositionWithOffset(int position,int offset)
滑動到指定item,在這個基礎(chǔ)上捌刮,又附加偏移了offset的距離。
獲取當前RecyclerView首尾可見item的位置方法
-
findFirstVisibleItemPosition()
返回當前RecycelrView中第一個可見的item的adapter postion -
findLastVisibleItemPosition()
返回當前RecycelrView中最后一個可見的item的adapter postion -
findFirstCompletelyVisibleItemPosition()
返回當前RecycelrView中第一個完整可見的item的adapter postion -
findLastCompletelyVisibleItemPosition()
返回當前RecycelrView中最后一個完整可見的item的adapter postion
這4個方法剑令,只有當RecyclerView在屏幕展示出來后糊啡,才能得到正常的返回值,否則都是-1
GridLayoutManager
該管理器繼承LinearLayoutManager,也有3個構(gòu)造方法吁津,由于是繼承LiearLayoutMnager棚蓄,使用起來差別不大,構(gòu)造方法內(nèi)使用了super()方法來直接調(diào)用了父類的構(gòu)造方法:只是構(gòu)造函數(shù)會多一個參數(shù) spanCount
: 列數(shù) 根據(jù)方法的注釋碍脏,可以知道梭依,默認情況下,GridLayoutManager是垂直的典尾。在方法內(nèi)役拴,列數(shù)是調(diào)用setSpanCount(spanCount)進行設(shè)置。如果GridLayoutManager是水平的钾埂,則spanCount 代表行數(shù)河闰,這個還是很容易理解。 GridLayoutManager不支持setStackFromEnd()褥紫,但支持setReverseLayout(boolean)方法姜性。其他LinearLayoutManager的方法在上面已經(jīng)提過了,就不重復了髓考。
這里我們spanCount 設(shè)置為3部念,效果如下圖
StaggeredGridLayoutManager
構(gòu)造函數(shù)StaggeredGridLayoutManager(int spanCount, int orientation) 意思和GridLayoutManager一樣。使用也是一樣氨菇。這邊就不具體表現(xiàn)講了儡炼,看效果
使用這3個布局管理器,差不多90%的需求都能滿足吧查蓉,LayoutManager也可以自定義實現(xiàn)乌询,后面有用在進行詳細討論,這邊僅說簡單的使用豌研。
git地址:https://gitee.com/stonezry/AndroidDemo