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会不停执行,从而不停地增加元素间的间距

你可能感兴趣的:(Recyclerview 间距设置)