RecyclerView 中项目之间的空间

Posted

技术标签:

【中文标题】RecyclerView 中项目之间的空间【英文标题】:Space between items in RecyclerView 【发布时间】:2021-06-28 22:09:48 【问题描述】:

我有一个 RecyclerView,我通过适配器填充项目(来自另一个布局的 ImageView + TextView)。问题是两个项目之间的距离会根据文本而变化。我希望所有项目之间的空间始终相同。我怎样才能做到这一点?

这是反映问题的图片:

这里是包含我的 recyclerView 的 xml:

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/categoryRecycler"
        android:layout_
        android:layout_
        android:layout_marginTop="16dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/title_category" />

这里是一个项目的xml:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_marginStart="6dp"
    android:layout_>

    <ImageView
        android:id="@+id/categoryImage"
        android:layout_
        android:layout_
        android:layout_marginTop="5dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_appliance" />

    <TextView
        android:id="@+id/categoryName"
        android:layout_
        android:layout_
        android:layout_marginTop="2dp"
        android:layout_marginEnd="3dp"
        android:gravity="center"
        android:maxWidth="100dp"
        android:text="name category"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/categoryImage" />

</androidx.constraintlayout.widget.ConstraintLayout>

提前致谢。

【问题讨论】:

只要您添加了 100dp 作为最大宽度,为什么不将文本的宽度设置为 100dp 而不是 wrap_content 或者您可以将固定宽度设置为 ConstraintLayout 当然,最好将宽度设置为 100dp 或者只是为ConsteraintLayout设置一个固定大小 【参考方案1】:

这是因为当文本的大小低于100dp 时,项目的宽度会变小

在此配置中,图像的宽度为 60dp,边距设置为 0dp,布局为 60dp 的 minWidth

当 TextView 的宽度增加超过 60dp 时,项目宽度也会增加

要解决此问题,您可以增加图像的边距,或者您可以按照 @Shay Kin 的建议直接将宽度设置为 100dp。

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_marginStart="6dp"
    android:layout_>

    <ImageView
        android:id="@+id/categoryImage"
        android:layout_
        android:layout_
        android:layout_marginEnd="24dp"
        android:layout_marginStart="24dp"
        android:layout_marginTop="5dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_appliance" />

    <TextView
        android:id="@+id/categoryName"
        android:layout_
        android:layout_
        android:layout_marginTop="2dp"
        android:layout_marginEnd="3dp"
        android:gravity="center"
        android:maxWidth="100dp"
        android:text="name category"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/categoryImage" />

 </androidx.constraintlayout.widget.ConstraintLayout>

【讨论】:

以上是关于RecyclerView 中项目之间的空间的主要内容,如果未能解决你的问题,请参考以下文章

即使在添加边距后,recyclerView 项目之间的空间也不显示

如何使用 AsyncTask 更新 RecyclerView 项目

在 RecyclerView 中的单元格之间添加空间? [复制]

为什么我的RecyclerView项目之间的空间不一样?

滚动时如何扩展 RecyclerView 项之间的空间

RecyclerView smoothScroll位于中心位置。安卓