我正在尝试在wrap_content上设置回收器视图的高度并使其尊重,但它将超出布局上的其他窗口小部件。 我现在该怎么办?
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white">
<TextView
android:id="@+id/tvPastRounds"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="0dp"
android:text="Past Rounds"
android:textColor="@color/text_color_black"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="24dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="16dp"
android:clipChildren="true"
android:maxHeight="150dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="@+id/tvPastRounds"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvPastRounds" app:layout_constraintVertical_bias="0.0"/>
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:43)
我有同样的问题,我找到了这个解决方案: 您应该将此属性添加到您的recyclerview中,它会在constraint_layout中生成您的recyclerview wrap_content:
app:layout_constraintHeight_default="wrap"
请告诉我此解决方案是否解决了您的问题。
编辑:回收者的身高应为0dp。
编辑2:在较新版本的支持库中,使用以下代码:
android:layout_height="wrap_content"
app:layout_constrainedHeight="true"
答案 1 :(得分:9)
app:layout_constraintHeight_default="wrap"
在较新版本的支持库中已弃用,因此请考虑使用
android:layout_height="wrap_content"
app:layout_constrainedHeight="true"
代替。
答案 2 :(得分:0)
我遇到了这个问题。我需要构建一个包含RecyclerView
的UI页面,其中包含应滚动的元素数量未知。该页面具有以下布局:
LinearLayout
ConstraintLayout
TextView
RecyclerView
TextView
我希望使用match_parent
和wrap_content
来确定所有物体的程序高度。
我希望RecyclerView
使用两个TextViews
之间的所有可用空间 。
关键是通过执行以下操作为RecyclerView
设置“不可能”约束:
app:layout_constraintTop_toBottomOf="@+id/topTextView"
app:layout_constraintBottom_toTopOf="@+id/bottomTextView"
并添加以下内容:
app:layout_constrainedHeight="true"
如果您需要在顶部TextView
和RecyclerView
(和/或底部TextView
和RecyclerView
之间添加边距,则将边距放在{{1} },而不是RecyclerView
。
代码示例
下面是我正在使用的实际代码(为了便于阅读,删除了一些文本样式)
TextViews
最后一点,<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="match_parent"
android:orientation="vertical">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#1A1A1C">
<TextView
android:id="@+id/selectcampus_es"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
android:layout_marginTop="48dp"
android:text="Pick a campus."
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_marginTop="24dp"
android:layout_marginBottom="24dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constrainedHeight="true"
app:layout_constraintTop_toBottomOf="@+id/selectcampus_es"
app:layout_constraintBottom_toTopOf="@+id/comingsoon_es" />
<TextView
android:id="@+id/comingsoon_es"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
android:layout_marginBottom="48dp"
android:text="More campuses coming soon."
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>
</LinearLayout>
也仅使用HolderView
。这也是该代码:
wrap_content