LayoutManager是一個抽象類,有3個子類:
LinearLayoutManager: 線性布局管理器 GridLayoutManager: 表格布局管理器 StaggeredGridLayoutManager: 瀑布流布局管理器
LinearLayoutManager
LinearLayoutManager 是線性布局管理器,使用頻率是最高的,展示的樣式跟listview一模一樣。 該類有3個構造方法:
LinearLayoutManager(Context context)
LinearLayoutManager(Context context,int orientation,boolean reverseLayout)
LinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr,int defStyleRes)
第一個構造方法內部調用了第二個構造方法,第二個構造方法參數(shù)的含義:
Context context:上下文,初始化時,構造方法內部加載資源用int orientation:方向,垂直(RecyclerView.VERTICAL)和水平(RecyclerView.HORIZONTA ),默認為垂直.-
boolean reverseLayout:是否倒序,設置為True,從最后一個item開始,倒序加載。此時,RecyclerView第一個item是添加進Adapter中的最后一個,最后一個item是第一個加進Adapter的數(shù)據(jù),RecyclerView會自動滑到末尾,另外item整體是依靠下方的。如下
在這里插入圖片描述
orientation也可以通過manger.setOritation()設置 reverseLayout,也可以通過manager.setReverseLayout()設置。setStackFromEnd(boolean stackFromEnd) 當設置為true時,列表便會從底部開始展示內容,RecycelrView會自動滑倒尾部。 這個方法和manager.setReverseLayout(true)共同點就是都自動滑動尾部,RecyclerView默認會展示末尾的item。差別在于,manager.setStackFromEnd(true)不會影響內部的數(shù)據(jù)順序,怎么添加進Adapter的,就怎么展示。
scrollToPosition(int position)滑動到指定item linearLayoutManager.scrollToPositionWithOffset(int position,int offset)滑動到指定item,在這個基礎上,又附加偏移了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個構造方法,由于是繼承LiearLayoutMnager,使用起來差別不大,構造方法內使用了super()方法來直接調用了父類的構造方法:只是構造函數(shù)會多一個參數(shù) spanCount : 列數(shù) 根據(jù)方法的注釋,可以知道,默認情況下,GridLayoutManager是垂直的。在方法內,列數(shù)是調用setSpanCount(spanCount)進行設置。如果GridLayoutManager是水平的,則spanCount 代表行數(shù),這個還是很容易理解。 GridLayoutManager不支持setStackFromEnd(),但支持setReverseLayout(boolean)方法。其他LinearLayoutManager的方法在上面已經提過了,就不重復了。
這里我們spanCount 設置為3,效果如下圖
StaggeredGridLayoutManager
構造函數(shù)StaggeredGridLayoutManager(int spanCount, int orientation) 意思和GridLayoutManager一樣。使用也是一樣。這邊就不具體表現(xiàn)講了,看效果
使用這3個布局管理器,差不多90%的需求都能滿足吧,LayoutManager也可以自定義實現(xiàn),后面有用在進行詳細討論,這邊僅說簡單的使用。
git地址:https://gitee.com/stonezry/AndroidDemo
歡迎關注本人公眾號和小程序,謝謝

