侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

浅谈Android RecyclerView 间距全适配

2023-06-03 星期六 / 0 评论 / 0 点赞 / 124 阅读 / 3346 字

本文介绍了Android RecyclerView 间距全适配,分享给大家,具体如下:LinearLayoutManager spacingimport android.graphics.Rect;import andr

本文介绍了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;    }  }}
.

使用方法很简单,上面注释中也已经给出:

.
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      }    }  }}
.

此处不仅对间距进行了处理,而且对spanCount也进行了处理,使用方法:

.
    int spanCount = 3; // 3 columns    int spacing = 50; // 50px    boolean includeEdge = false;    mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));
.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持..。

广告 广告

评论区