RecyclerView给不同的子item设置不同的间距

之前写RecyclerView列表时候都是在布局中设置layout_marginStart和layout_marginEnd,但是这种会导致列表横向滑动的时候,这部分间距未被使用。

<android.support.v7.widget.RecyclerView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_marginStart="@dimen/s_15dp"
      android:layout_marginEnd="@dimen/s_15dp">
</android.support.v7.widget.RecyclerView>

在最近新的项目需求中,UI要求列表横向滑动的时候左右边距为30像素,但中间的item之间的距离为14px,同时左右的30像素在横向滑动的时候还要被利用上,不能留白。为满足这种需要,之前的设置边距方式不可行,只能在每个item上去设置
下面代码是设置中间每个item之间间距为14px

StuHorizontalKeyWordAdapter stuHorizontalKeyWordAdapter = new                                    StuHorizontalKeyWordAdapter(getContext(),keyWorkList);
recyclerView.setAdapter(stuHorizontalKeyWordAdapter);
recyclerView.setLayoutManager(new         LinearLayoutManager(getContext(),LinearLayoutManager.HORIZONTAL,false));
recyclerView.addItemDecoration(new GridSpacingItemDecoration(keyWorkList.size(),(int)         getResources().getDimension(R.dimen.s_7dp),false));

第一个item的左边距15px和最后一个item的右边距15px需要在适配器Adapter中设置
在Adapter的onBindViewHolder方法中这样设置

int adapterPosition = helper.getLayoutPosition();
//父控件是RecyclerView,否则会错
RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) textView.getLayoutParams();
if(adapterPosition == 0){
     //第一个item设置据左边30px
     layoutParams.setMarginStart((int)context.getResources().getDimension(R.dimen.s_15dp));
}else if(adapterPosition == data.size()-1){
     //最后一个item设置据右边30px
     layoutParams.setMarginEnd((int)context.getResources().getDimension(R.dimen.s_15dp));
}else {
     //其他item左右边距为0px
     layoutParams.setMarginStart((int)context.getResources().getDimension(R.dimen.s_0dp));
     layoutParams.setMarginEnd((int)context.getResources().getDimension(R.dimen.s_0dp));
}
textView.setLayoutParams(layoutParams);

这样就可以达到UI要求的以下效果了


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

推荐阅读更多精彩内容