如何根据屏幕大小设置Recycler View的项宽度?

8

我希望我的RecyclerView项宽度和高度相等,并根据屏幕尺寸动态更改其大小?

有什么建议或示例代码可以帮助我完成吗?

这是我的代码:

    mrv = findViewById(R.id.rv_segments);
    list = new ArrayList<>();
    mAdapter = new SegmentsAdapter(this, list,station.getWidthCount());

    //mAdapter.setOnItemClickListener(this);

    mLayoutManager = new LinearLayoutManager(getApplicationContext());
    mLayoutManager = new GridLayoutManager(getActivity(), station.getWidthCount());


    mrv.setLayoutManager(mLayoutManager);
    mrv.setAdapter(mAdapter);

这是我的适配器:

public SegmentsAdapter.BaseHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view1 = LayoutInflater.from(context).inflate(R.layout.recyler_item_segments,parent,false);
    BaseHolder viewHolder1 = new BaseHolder(view1);
    return viewHolder1;
}

我的回收项xml如下:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/custom_ln_border"
    android:padding="2dp">
<LinearLayout
    android:id="@+id/ln"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:scaleType="centerCrop"
    android:orientation="horizontal"
    android:background="@color/menu3"
    />
</LinearLayout>

你是否想要在单个屏幕上显示所有的回收视图项?您能解释一下您想如何更改回收视图项的大小吗? - Binary Baba
我认为在item_layout中使用match parent会解决问题,同时使用setHasFixedSize(true)。不过你的问题还是有些令人困惑。 - Masoom Badi
在您的顶部线性布局中使用“match_parent”,它将会匹配父容器的高度和宽度。 - Shahin
我正在尝试制作一个类似于拼图游戏的屏幕。 我想做的只是正方形回收项。但这个正方形的宽度应该根据屏幕大小进行更改。 如果我使用大屏幕设备,正方形高度将会很大。如果我使用小屏幕,则会很小。 - tsniso
对于线性布局的子元素,请使用“layout_weight”参数来确保它们被显示在您想要的位置。 - Shahin
2个回答

5
您的RecyclerView应该采用具有指定Column Span大小的LayoutManager,类似于以下内容:

mList.setLayoutManager(new GridLayoutManager(getContext(), 2));

现在,您只需要管理项目的高度。对吧? 这样做:

@Override
public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  View myView = inflater.inflate(R.layout.item_home, parent, false);
  GridLayoutManager.LayoutParams params = (GridLayoutManager.LayoutParams) myView.getLayoutParams();
  params.height = (parent.getMeasuredHeight() / 2) - dim24;
  myView.setLayoutParams(params);
  return new myViewHolder(myView);
}

所以,这个(parent.getMeasuredHeight() / 2) - dim24可以让你调整你的视图“高度”。

dim24只是一个填充整数,你可以把它去掉。

请注意,我使用了“2”列,所以我将项目高度除以“2”。


使用android:layout_width="match_parent" 和 android:layout_height="match_parent"。 - Shahin
我的 Recycler Item XML 应该怎么写?我修改了我的问题并添加了 XML。 - tsniso
你只需要将父容器的高度设置为“match_parent”。但是这可能不适用于约束布局。很抱歉回复晚了。顺便说一句,因为你正在使用RecyclerView,所以总会有一个滚动条需要处理。 - Shahin

1
请在recyclerview项中使用ConstraintLayout。约束比相对布局和线性布局更好。约束布局会根据屏幕自动调整。

4
约束布局不如RecyclerView的子项性能友好。 - abhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接