RecyclerView的最大高度为WRAP_CONSTRAINT时,不能正确包装其内容

时间:2019-03-15 15:57:59

标签: android android-recyclerview android-constraintlayout

我正在尝试使用具有不同项目计数的RecylerView,将其高度包装到其项目中,但不要使其超出其限制。我相信我已经正确设置了。这是用于这种布局的简单XML:

<!-- container.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_width="match_parent"
    android:layout_height="600dp"
    android:background="@colors/blue">

    <View
        android:id="@+id/bottomGreenView"
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:background="@colors/green"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@colors/red"
        app:layout_constrainedHeight="true"
        app:layout_constraintHeight_max="0dp"
        app:layout_constraintVertical_bias="0"
        app:layout_constraintBottom_toTopOf="@id/bottomGreenView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:itemCount="1"
        tools:listitem="@layout/test_list_item" />

</androidx.constraintlayout.widget.ConstraintLayout>
<!-- test_list_item.xml -->
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@colors/white">

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="15dp"
        android:text="List item here"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

请注意,容器为蓝色,RecyclerView为红色,不应超过的底视图为绿色。并且由于列表项是白色的,因此项目之间没有间距,并且RecyclerView应该环绕列表项,因此,永远不要看到RecyclerView的红色背景。但是,您可以在此处清楚地看到RecyclerView实际上已经被看到并且比它应该的高度高得多:

The problem, where the RecyclerView (whose background is red) is larger than it needs to be.

我想要实现的是RecyclerView正确包装其内容的地方:

What I'm trying to achieve, where the RecyclerView properly wraps its content.

有趣的是,如果我具有TextView的宽度wrap_content并删除其端到端约束(后者仅使它不水平居中),这实际上可以按预期工作。但是,在我的实际应用程序中,我需要这些约束,因为我在右侧也有一些内容,这些内容我不想与长文本重叠。

对我来说,这在ConstraintLayout或RecyclerView中(或同时使用)都感觉像是一个问题,因此我也提交了issue in the bug tracker。但是,如果不是,那么我很高兴听到大家都说

0 个答案:

没有答案