如何在 RecyclerView 中的最后一项之后设置固定边距?

How to set constant margin after last item in RecyclerView?

我希望在 RecyclerView 中的 last item 之后有一些 space 就像图像一样。

图像不是处于项目数量少的状态,而是处于大到可以滚动的状态。

换句话说,当滚动到底部时,我希望最后一项位于图像黑条上方。

但是我实现的是:

如图所示,我实现的是项目穿透栏并叠加在底部。

滚动时,栏是否与项目重叠无关紧要,但滚动到底部时,我希望最后一个项目位于栏的顶部。

加法:

这些回收站视图动态添加和删除项目。

这一次你只需 post XML 代码。

如果您需要其他代码,请告诉我。

XML

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintTop_toTopOf="parent" />

        <FrameLayout
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="24dp"
            android:background="@color/transparentBg"
            app:layout_constraintBottom_toBottomOf="parent">
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/add_exercise"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:padding="8dp">

                <ImageView
                    android:id="@+id/add_icon"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:src="@drawable/ic_add"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:tint="@color/black" />

                <TextView
                    android:id="@+id/add_text"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:text="ADD ROUTINE"
                    android:textAlignment="center"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@id/add_icon" />
            </androidx.constraintlayout.widget.ConstraintLayout>
        </FrameLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

您可以将 FrameLayout 设置为特定高度,然后将 recyclerview 边距底部设置为与框架布局高度相同。

或者您可以将 ConstraintLayout 更改为 LinearLayout。

如果您希望您的项目显示在添加图标下方(我个人不喜欢)并在底部添加一些额外的 space,您可以

  1. 在适配器的末尾添加一个空视图

  1. 设置 clipToPadding=false 并添加一个底部填充,使回收器视图从底部跳过该高度,但仍然像这样显示它们(而不是剪裁它们)(我不确定 160dp 是否是一个很好的数字总结了你的尺寸)
<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintTop_toTopOf="parent" 
            android:clipToPadding="false"
            android:paddingBottom="160dp"/>


  1. 如果你想让你的回收站显示在添加按钮上方(我认为这样看起来更好),你可以这样更改
<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:orientation="vertical"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@id/button" />