Android RecycleView列表使用GridLayoutManager 均分子项Item,且左右宽度相同

1.需求描述:

列表分为一列两个,两个子项宽度一致,且左右边距一样,就是要好看,子项宽度适配手机,高度适配宽度。

2.问题描述:

但是我们直接设置的时候,他的子项会在给他的布局的左边,于是我想到了设置下子项的左右边距,但是android手机屏幕太多种类型了,所以在部分手机上,也不大行。

3:解决办法:

既然要匹配手机屏幕宽度,那就让手机宽度来决定子项宽度。

1.在 XML 布局文件中,将 RecyclerView 的宽度设置为 match_parent

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

但是一般的为了美观,都会让列表有边距,这里自行设置

2.在代码中,设置 GridLayoutManager 并应用到 RecyclerView

RecyclerView recyclerView = findViewById(R.id.recyclerView);
GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(layoutManager);

3.创建 RecyclerView 的 Adapter,并在 Adapter 中重写 onCreateViewHolder() 方法(记得是在Adapter里面写代码)

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
    // 计算子项的宽度
    int screenWidth = parent.getContext().getResources().getDisplayMetrics().widthPixels;
    int itemWidth = (screenWidth - dpToPx(40)) / 2;
    // 设置子项的宽度
    view.getLayoutParams().width = itemWidth;
    return new ViewHolder(view);
}

private int dpToPx(int dp) {
    float density = getResources().getDisplayMetrics().density;//这个getresources需要context对象哈,拿activity的也行,application的也行
    return Math.round(dp * density);
}

上面我减去了40dp,就是为了美观点,不然两个子项直接怼一起了,很丑哦~~

这样就可以了。之前是设置decoration,发现不太行,还是得适配手机宽度才行。

当然,如果每个子项的宽会随内容改变,建议使用流布局哈。

猜你喜欢

转载自blog.csdn.net/LoveFHM/article/details/131555650