之前写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