Android:根据RecyclerView的宽度调整RecyclerView数据项的大小

时间:2019-02-02 19:59:35

标签: android android-recyclerview

我有一个包含一个RecyclerView的LinearLayout。 RecyclerView的宽度设置为match_parent,因此其宽度与LinearLayout相同。

我想基于RecyclerView的宽度设置RecyclerView中数据项的宽度。例如,假设RecyclerView的宽度为W并包含3个数据项,我想将第一个数据项的宽度设置为10dp,将第二个和第三个数据项的宽度设置为(W-10dp)/ 2。 / p>

我该如何实现?

1 个答案:

答案 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