ConstraintLayout の Android RecyclerView がスクロールしない 質問する

ConstraintLayout の Android RecyclerView がスクロールしない 質問する

制約レイアウト内に recyclerView がありますが、スクロールできません。リストは画面の下にスクロールせずにそのまま続きます。レイアウトを相対レイアウトに変更すると、スクロールは正常に機能します。

どうすればスクロールできますか?

次の XML はレイアウトを示しています。リサイクラー ビューは下部にあります。レイアウトには、画面の上部に画像と説明があります。この画面設定は画面の 30% を占めます。その後にセパレーターと、画面の残りの部分を占めるリサイクラー ビューが続きますが、これはスクロールできません。

<?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>

ベストアンサー1

をスクロールするにはRecyclerView、次の 2 つの条件のいずれかが満たされている必要があります。

  • は、RecyclerViewそのアイテムすべてよりも高さが低いです
  • RecyclerViewスクロールする親の中にあります

ConstraintLayoutはスクロールする親ではないので、がRecyclerView「小さすぎる」ことを確認し、ユーザーがその子をスクロールできるようにする必要があります。

最も簡単な方法は、RecyclerView次のように定義された高さを指定することです。

android:layout_height="200dp"

もちろん、これは、事前にどのくらいの大きさRecyclerViewにしたいかを正確に知っている場合にのみ機能しますが、通常はそうではありません。

よりよい解決策は、制約を使用して の高さを定義することですRecyclerView。最初のステップは の高さを指定することです0dp。これは「制約の一致」と考えることができます。言い換えると、 の上部と下部の制約を満たすために必要な高さに を設定するようにシステムに指示していることになりますRecyclerView

RecyclerView次に、上部と下部の制約を定義する必要があります。最も単純なのは、 の上部を親の上部に制約し、下部を親の下部に制約することです。次のようになります。

android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"

または、RecyclerView他のビューを基準にして配置することもできます。次のようになります。

android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/viewAboveMe"
app:layout_constraintBottom_toTopOf="@+id/viewBelowMe"

高さ を上部と下部の両方の制約と組み合わせる限り(そして が実際にその内容よりも小さい0dp限り)、 を希望どおりにスクロールできるようになります。RecyclerViewRecyclerView

オリジナル

では、高さにがRecyclerView使用されていますwrap_content。スクロールさせる場合は、固定の高さを指定するか、 内で高さにConstraintLayoutを使用して、属性を指定する必要があります。0dpapp:layout_constraintBottom_xxx

おすすめ記事