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整體是依靠下方的梗掰。如下image
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)提過了,就不重復(fù)了移层。
這里我們spanCount 設(shè)置為3仍翰,效果如下圖
StaggeredGridLayoutManager
構(gòu)造函數(shù)StaggeredGridLayoutManager(int spanCount, int orientation) 意思和GridLayoutManager一樣。使用也是一樣观话。這邊就不具體表現(xiàn)講了予借,看效果
使用這3個布局管理器,差不多90%的需求都能滿足吧频蛔,LayoutManager也可以自定義實現(xiàn)灵迫,后面有用在進行詳細討論,這邊僅說簡單的使用晦溪。