淺談Android RecyclerView 間距全適配
更新時(shí)間:2017年12月06日 09:59:11 作者:anonymoussf
本篇文章主要介紹了淺談Android RecyclerView 間距全適配,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
本文介紹了Android RecyclerView 間距全適配,分享給大家,具體如下:
LinearLayoutManager spacing
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* Created by anonymous on 2016/9/9 0009.
* <p>
* SpacesItemDecoration
* <p>
* mRecyclerView.addItemDecoration(new SpacesItemDecoration(5));
*/
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpacesItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
// Add top margin only for the first item to avoid double space between items
if (parent.getChildLayoutPosition(view) == 0) {
outRect.top = space;
} else {
outRect.top = 0;
}
}
}
使用方法很簡單,上面注釋中也已經(jīng)給出:
mRecyclerView.addItemDecoration(new SpacesItemDecoration(5));
GridLayoutManager or StaggeredGridLayoutManager spacing
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* Created by anonymous on 2016/9/9 0009.
* <p>
* GridSpacingItemDecoration
* <p>
* int spanCount = 3; // 3 columns
* int spacing = 50; // 50px
* boolean includeEdge = false;
* recyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));
*/
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
private int spanCount;
private int spacing;
private boolean includeEdge;
public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
this.spanCount = spanCount;
this.spacing = spacing;
this.includeEdge = includeEdge;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view); // item position
int column = position % spanCount; // item column
if (includeEdge) {
outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)
if (position < spanCount) { // top edge
outRect.top = spacing;
}
outRect.bottom = spacing; // item bottom
} else {
outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f / spanCount) * spacing)
if (position >= spanCount) {
outRect.top = spacing; // item top
}
}
}
}
此處不僅對間距進(jìn)行了處理,而且對spanCount也進(jìn)行了處理,使用方法:
int spanCount = 3; // 3 columns
int spacing = 50; // 50px
boolean includeEdge = false;
mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中用Bmob實(shí)現(xiàn)短信驗(yàn)證碼功能的方法詳解
本文給大家分享通過第三方平臺Bmob實(shí)現(xiàn)發(fā)送驗(yàn)證碼和校驗(yàn)驗(yàn)證碼的功能,非常不錯,具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09
Android之高德地圖定位SDK集成及地圖功能實(shí)現(xiàn)
本文主要介紹了Android中高德地圖定位SDK集成及地圖功能的實(shí)現(xiàn)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04

