RecyclerView詳解(四):LayoutManager布局管理器

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)講了,看效果

http://r.photo.store.qq.com/psb?/V14WdqfR0u5uGA/O4kTkclTY*JGmBLtXVXlfoVsoB9tP2hCkNFgAYkqLIY!/r/dFMBAAAAAAAA

使用這3個布局管理器,差不多90%的需求都能滿足吧,LayoutManager也可以自定義實現(xiàn),后面有用在進行詳細討論,這邊僅說簡單的使用。

git地址:https://gitee.com/stonezry/AndroidDemo

歡迎關注本人公眾號和小程序,謝謝
公眾號
小程序
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容