RecyclerView Card 双向扩展

RecyclerView Card expands in both directions

我有一个带有 CardView 的 RecyclerView。当用户点击卡片时,它应该会扩展,在其下方显示一个视图列表。但是,当它扩展时,它既向下扩展又向上扩展,在相关内容上方留下空白space。

This is what the expanded card ends up looking like.

我的布局文件如下所示:

<layout 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">

    <data>
        <variable
            name="event"
            type="com.example.android.productiville.calendarApiService.Event" />
    </data>

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        app:cardBackgroundColor="#1C1C1C"
        app:cardCornerRadius="8dp">

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

            <TextView
                android:id="@+id/taskName"
                android:layout_width="276dp"
                android:layout_height="64dp"
                android:layout_marginStart="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginBottom="8dp"
                android:fontFamily="@font/work_sans"
                android:gravity="center_vertical"
                android:text="@string/taskName"
                android:textSize="18sp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:taskName="@{event}" />

            <TextView
                android:id="@+id/dayOfWeek"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:fontFamily="@font/work_sans"
                android:text="@string/taskDay"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/taskName"
                app:layout_constraintTop_toTopOf="@+id/taskName"
                app:taskDay="@{event}" />

            <TextView
                android:id="@+id/startTime"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:fontFamily="@font/work_sans"
                android:text="@string/startTime"
                app:layout_constraintBottom_toBottomOf="@+id/taskName"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/taskName"
                app:layout_constraintTop_toBottomOf="@+id/dayOfWeek"
                app:startTime="@{event}" />

            <com.google.android.material.button.MaterialButton
                android:id="@+id/editTaskButton"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:insetLeft="0dp"
                android:insetTop="0dp"
                android:insetRight="0dp"
                android:insetBottom="0dp"
                android:visibility="gone"
                app:cornerRadius="30dp"
                app:icon="@drawable/ic_create_24px"
                app:iconGravity="textStart"
                app:iconPadding="0dp"
                app:layout_constraintBaseline_toBaselineOf="@+id/addSubTaskButton"
                app:layout_constraintEnd_toStartOf="@+id/addSubTaskButton"
                app:layout_constraintStart_toStartOf="parent" />

            <com.google.android.material.button.MaterialButton
                android:id="@+id/addSubTaskButton"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:layout_marginTop="8dp"
                android:layout_marginBottom="8dp"
                android:insetLeft="0dp"
                android:insetTop="0dp"
                android:insetRight="0dp"
                android:insetBottom="0dp"
                android:visibility="gone"
                app:cornerRadius="30dp"
                app:icon="@drawable/ic_add_black_24dp"
                app:iconGravity="textStart"
                app:iconPadding="0dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <com.google.android.material.button.MaterialButton
                android:id="@+id/closeEditPanelButton"
                style="@style/Widget.MaterialComponents.Button.TextButton"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:insetLeft="0dp"
                android:insetTop="0dp"
                android:insetRight="0dp"
                android:insetBottom="0dp"
                android:visibility="gone"
                app:cornerRadius="30dp"
                app:icon="@drawable/ic_clear_white_24dp"
                app:iconGravity="textStart"
                app:iconPadding="0dp"
                app:layout_constraintBaseline_toBaselineOf="@+id/addSubTaskButton"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/addSubTaskButton" />

            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/expandableLayout"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/taskName"
                android:layout_marginTop="16dp"
                android:visibility="gone">

                <LinearLayout
                    android:id="@+id/subTasks"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginTop="8dp"
                    android:orientation="vertical"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

            </androidx.constraintlayout.widget.ConstraintLayout>

        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.cardview.widget.CardView>
</layout>

我做不到,卡只能向下展开。我会很感激这里的一些方向。提前致谢!

问题是“taskName”TextView 和“addSubTaskButton”按钮被限制在 ConstraintView 的顶部和底部,高度=wrap_content 正在调整卡片的大小,以便这些视图根据这些约束保持居中。删除这些约束解决了问题。