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,发现不太行,还是得适配手机宽度才行。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&岁月不待人&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值