我正在尝试使用具有不同项目计数的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实际上已经被看到并且比它应该的高度高得多:
我想要实现的是RecyclerView正确包装其内容的地方:
有趣的是,如果我具有TextView的宽度wrap_content
并删除其端到端约束(后者仅使它不水平居中),这实际上可以按预期工作。但是,在我的实际应用程序中,我需要这些约束,因为我在右侧也有一些内容,这些内容我不想与长文本重叠。
对我来说,这在ConstraintLayout或RecyclerView中(或同时使用)都感觉像是一个问题,因此我也提交了issue in the bug tracker。但是,如果不是,那么我很高兴听到大家都说