ConstraintLayout 嵌套RecyclerView,让RecyclerView的高度自适应并且marginTop有效的操作

552 阅读1分钟

使用 ConstraintLayoutapp:layout_constrainedHeight="true":您可以在 ConstraintLayout 上设置 app:layout_constrainedHeight="true",以确保 RecyclerView 的高度不会自动调整以适应其内容,并且 marginTop 仍然生效。

我的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <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_width="match_parent"
        android:layout_height="wrap_content"
        android:minWidth="310dp"
        app:bl_corners_radius="@dimen/margin_16"
        app:bl_solid_color="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_19"
            android:text="我是标题"
            android:textColor="@color/common_color_333333"
            android:textSize="@dimen/textsize_16sp"
            android:textStyle="bold"
            app:bl_corners_radius="@dimen/margin_12"
            app:bl_solid_color="@color/white"
            app:layout_constraintEnd_toStartOf="@+id/ivClos"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <ImageView
            android:id="@+id/ivClos"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_18"
            android:layout_marginEnd="@dimen/margin_24"
            android:padding="@dimen/margin_6"
            android:src="@drawable/common_icon_close_dark"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="@dimen/m16_5"
            android:layout_marginTop="@dimen/margin_19"
            app:layout_constrainedHeight="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/tv_title" />

    </ConstraintLayout>
</layout>

ConstraintLayout嵌套RecyclerView时,RecyclerView的高度要自动撑满,layout_height高度就需要设置为wrap_content。如果没有设置app:layout_constrainedHeight="true"时,当RecyclerView数据大于整个屏幕时,marginTop就会失效,这时候就会出现,RecyclerView的item盖住了我的标题TextView tv_title。

但是如果加上app:layout_constrainedHeight="true"时,就完美解决了高度自适应marginTop也生效的情况了。 Mark一下!