我有一个包含一个RecyclerView的LinearLayout。 RecyclerView的宽度设置为match_parent,因此其宽度与LinearLayout相同。
我想基于RecyclerView的宽度设置RecyclerView中数据项的宽度。例如,假设RecyclerView的宽度为W并包含3个数据项,我想将第一个数据项的宽度设置为10dp,将第二个和第三个数据项的宽度设置为(W-10dp)/ 2。 / p>
我该如何实现?
答案 0 :(得分:0)
获取recyclerView宽度,您可以在其中引用RecyclerView(在Fragment或Activity中)。然后,将宽度值发送到适配器:
recyclerWidth = recyclerView.getWidth();
adapter.setWidthOfRecycler(recyclerWidth);
在适配器的 OnBindViewHolder 中,更改ViewHolder的布局参数以更改宽度,如下所示:
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position){
int viewHolderWidth = (recyclerWidth - dpToPx(10))/2;
if(position == 0){
viewHolderWidth = dpToPx(10);
}
viewHolder.setLayoutParams(new RecyclerView.LayoutParams(viewHolderWidth ,LayoutParams.WRAP_CONTENT/**height**/));
}
public static int dpToPx(float dp) {
float resultPix = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,context.getResources().getDisplayMetrics());
return (int)resultPix;
}
如果 recyclerView.getWidth()方法返回零,请检查以下内容: View's getWidth() and getHeight() returns 0