如何在recyclerview的gridLayoutManager中从cardview中删除右边距

Posted

技术标签:

【中文标题】如何在recyclerview的gridLayoutManager中从cardview中删除右边距【英文标题】:how to remove right margin from cardview in gridLayoutManager of recyclerview 【发布时间】:2021-11-22 04:22:54 【问题描述】:

我使用带有 gridLayoutManager 的 recyclerView 作为其布局管理器来显示 cardViews,但我不知道为什么它有这些右边距,尽管我在 recyclerView 和 cardView 中都没有给出任何边距

回收站查看代码

    <androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_
    android:layout_
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@id/constraintLayoutTop"
    app:layout_constraintVertical_weight="1" />

卡片查看代码

<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com   
/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardView1"
android:layout_
android:layout_
app:cardCornerRadius="@dimen/_20sdp"
app:cardElevation="0dp"
app:cardMaxElevation="0dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true"
app:strokeColor="@android:color/darker_gray"
app:strokeWidth="@dimen/_1sdp">

网格布局管理器

        GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(),2,GridLayoutManager.VERTICAL,false);
    mRecyclerView.setLayoutManager(gridLayoutManager);

【问题讨论】:

您正在硬编码卡片视图的宽度和高度的大小。 GridLayout 是在网格中定位视图,但没有给出在哪里做的指示。所以它只是左对齐,但由于卡片的大小是硬编码的,所以剩下的任何空间都很好......没有使用。 【参考方案1】:

解决方案 1:

试试这个解决方案,您可以记住并在任何需要的地方实施。没有错误,没有疯狂的计算。为卡片/项目布局放置边距,并将与填充相同的大小放置到RecyclerView:

item_layout.xml

<CardView
    android:layout_
    android:layout_
    android:margin="10dp">

activity_layout.xml

<RecyclerView
    android:layout_
    android:layout_
    android:padding="10dp"/>

例子:

解决方案 2:

Recyclerview 项目布局中使用CardView,如下所示:

  <com.google.android.material.card.MaterialCardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cardView1"
    android:layout_
    android:layout_
    app:cardCornerRadius="@dimen/_20sdp"
    app:cardElevation="0dp"
    app:cardMaxElevation="0dp"
    app:cardPreventCornerOverlap="false"
    app:cardUseCompatPadding="true"
    app:strokeColor="@android:color/darker_gray"
    app:strokeWidth="@dimen/_1sdp"
    app:contentPadding="10dp"
    card_view:cardUseCompatPadding="true">

【讨论】:

【参考方案2】:

您为CardView 的宽度设置了dimen 大小,并且项目获得了大小,并且左边的空间看起来是一个边距。 您应该将单元格的宽度设置为match_parentrecyclerview 将宽度的大小设置为手机宽度的一半。

【讨论】:

以上是关于如何在recyclerview的gridLayoutManager中从cardview中删除右边距的主要内容,如果未能解决你的问题,请参考以下文章

当 Recyclerview 在 NestedScrollview 中时,如何避免绑定所有项目?

如何在 RecyclerView 中选择位置?

如何在“onBindViewHolder”中获取recyclerview项目的高度

如何在 RecyclerView 中使用 offsetChildrenHorizo​​ntal()

如何在android的Recyclerview中显示更多[重复]

如何从其他recyclerview接收recyclerview中的数据?