废话不多说,直接上代码。

LinearLayoutManager spacing

import android.graphics.Rect;import android.support.v7.widget.RecyclerView;import android.view.View;/** * Created by anonymous on 2016/9/9 0009. * 

* SpacesItemDecoration *

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

* GridSpacingItemDecoration *

* 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));

by anonymous

更多相关文章

  1. Android——高德地图设置中心点和缩放比例,获取两点之间距离
  2. Android(安卓)自定义设置文本字体间间距
  3. Android中EditText的焦点改变处理
  4. android KEYCODE_BACK监听处理
  5. Android图片圆角处理
  6. 背景及边框处理
  7. android 建议在onPause和onStop处理的事情
  8. Android(安卓)Activity 切屏处理
  9. Android(安卓)Looper中的MessageQueue消息处理机制

随机推荐

  1. 三种方法,刷新 Android(安卓)的 MediaStor
  2. Android(安卓)startForeground 却无notif
  3. Android中关于APP打包的那些事
  4. 《Android开发艺术探索》之学习笔记(三)Vie
  5. android listview adapter中设置点击直接
  6. Launcher功能的修改及添加,本篇是一些小功
  7. Android(安卓)XML 中schema和自定义属性
  8. 在ListView中增加HeaderView和FootView
  9. Android(安卓)TextView中标点符号或英文
  10. 关于Android串口通讯总结