不知道怎麼,自己最近的時間老是不想學習,又開始玩一起來了,又在莫名的幻想一起沒有用的東西。今天我把我忘記的東西下下來啊,以後在用的時候不用再去翻別人的博客自己博客有那不很好。
給指定的item設置間距,
首頁寫一個類
pubulic class RecyclerView extends ReyclerView.ItemDecoration{
//定義局部變量
private int space;
//創建構造起
public RecyclerView(int space){
初始化變量
this.space=space;
}
重寫方法
getitemoffsets
@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.getChildPosition(view) == 0)
outRect.top = space;
}
}
上面是寫的LinearLayoutManager
這裏是GridLayoutManager或者StaggeredGridLayoutManager 設置Item間距的辦法
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
}
}
}
}
調用
int spanCount = 3; // 3 columns int spacing = 50; // 50px boolean includeEdge = false;
mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));