我有一个在约束布局中的RecyclerView,但是我无法使其滚动,列表会在屏幕下方继续而没有滚动条。如果我将布局更改为相对布局,则滚动正常工作。
如何使它滚动?
以下XML显示了我的布局,RecyclerView位于底部。布局顶部有图像和描述。此屏幕设置占据屏幕的30%。接着是分隔符和应该占据其余屏幕且无法滚动的RecyclerView。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="match_parent"
android:background="@color/gradient_top">
<android.support.v7.widget.AppCompatImageView
android:id="@+id/imageViewLock"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="16dp"
app:layout_constraintBottom_toTopOf="@+id/textViewPermissionsTitle"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_phone_lock"/>
<TextView
android:id="@+id/textViewPermissionsTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:text="@string/allow_permissions"
android:textColor="@color/white"
android:textSize="@dimen/description_text_size"
app:layout_constraintBottom_toTopOf="@+id/guideline1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<android.support.constraint.Guideline
android:id="@+id/guideline1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.3"/>
<View
android:id="@+id/viewSeparator"
android:layout_width="match_parent"
android:layout_height="0.7dp"
android:layout_marginTop="10dp"
android:background="@color/bright_blue"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline1"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerViewPermissions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbarSize="1dp"
android:scrollbarThumbVertical="@color/white"
android:scrollbars="vertical"
app:layout_constraintTop_toBottomOf="@+id/viewSeparator" />
</android.support.constraint.ConstraintLayout>
RecyclerView
必须具有一些固定高度(小于其内容)。特别是在ConstraintLayout
中,您可以提供0dp
的高度,然后提供app:layout_constraintTop_xxx="@id/some_other_view"
和app:layout_constraintBottom_xxx="@id/some_other_view"
(其中“xxx”可以替换为toBottomOf
或toTopOf
等)。这将“约束”RecyclerView
并定义其大小。我只提到了底部约束,因为问题已经提供了顶部约束。 - Ben P.RecycleView
。每当其中的项目超过分配的空间时,它就会溢出。match_parent
和wrap_content
都像RecycleView
是唯一存在的元素一样运作,因此项目将从屏幕顶部绘制到底部覆盖其他元素。非常感谢! - FRobwidth="0dp"
应用于recycler非常有帮助。必要的上下约束已经设置好了,高度设置为0dp,但是没有起作用。从同事那里听说,在ConstraintLayout
中不推荐使用match_parent
,并且将宽度也更改了,这样就解决了问题 :) - Eduards Pozarickis