Recyclerview 间距设置

Android新的Recyclerview布局完美代替ListView,GridView等,其大多数属性都需要自己进行定制,更加灵活,但有时候也觉得麻烦。这里对其中作为GridView情况时的间距设置做介绍。

主要是讲怎么对GridView模式进行间距的设置,因为将之前的GridView换过来,不像GridView一样可以直接就设置好,我们需要根据确定item的位置然后再来确定需要设置哪个位置的间距。做着看起来比较麻烦,不过的确是高度自定义,十分灵活。项目中在Recyclerview中又嵌套了一个Recyclerview,子Recyclerview以GridView方式显示,之前使用GridView的时候直接在建立的时候使用android:horizontalSpacingandroid:verticalSpacing就可以进行间距的设置,而Recyclerview没有这个属性,但它提供了一个抽象类ItemDecoration可以对Recyclerview的Item进行间距的配置,我们需要做的就是实现该抽象类中的getItemOffsets
方法。
下面是具体的实现:
我们的思路就是通过对item位置的判断确定对其边距的设置,在本例中,我们的布局是将item按两列显示,我们要对左侧的item右边位置设置边距,然后对右侧item的左边位置设置边距。因此我们需要做的就是判断哪个item位于左侧,哪一个位于右侧,这个通过取模的方式就可以获得,代码如下:

private class SpaceItemDecoration extends RecyclerView.ItemDecoration {
  private int space;//声明间距 //使用构造函数定义间距 
  public SpaceItemDecoration(int space) {
     this.space = space;
 } 
@Override
  public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 
    //获得当前item的位置 
    int position = parent.getChildAdapterPosition(view); 
    //根据position确定item需要留出的位置 
    switch (position % 2) { 
      case 0:
        //位于左侧的item 
        outRect.right = this.space; 
        break; 
      case 1:
        //位于右侧的item 
        outRect.left = this.space; 
        break; 
      default: 
        break; 
}  
      //设置底部边距 
    outRect.bottom = this.space; 
  }
 }

最后addItemDecoration
即可。
注意:addItemDecoration放到ViewHolder中,放到onBindViewHolder每次获得item焦点它都会执行一次,会出现十分酷炫的效果,你会发现列表中的元素会越来越小,因为在下拉时,onBindViewHolder会不停执行,从而不停地增加元素间的间距

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,612评论 25 708
  • 最终的效果如下: 上图是我需求的一个页面,作为学习就直接贴出来了。 为了更好的使用网格布局,所以决定使用Recyc...
    tyrannos阅读 5,305评论 5 1
  • 先贴代码 模拟数据 76=(500-(5+1)*20)/5 有了以上的信息,想理解就不难了吧。
    StyleShu阅读 621评论 0 0
  • Tangram是阿里出品、用于快速实现组合布局的框架模型,在手机天猫Android&iOS版 内广泛使用 该框架提...
    wintersweett阅读 3,380评论 0 1
  • SDWebImage是ios上常用的一套网络图片加载的方案。 oc和swift语言都支持 探索了一下源码,受益良多...
    bibibime阅读 393评论 3 0