web-dev-qa-db-fra.com

Scrollview dans la présentation de la contrainte ne défile pas jusqu'au bas de la contrainte parent

J'ai un formulaire qui a environ 12/13 champs. J'ai utilisé un Scrollview dans une mise en page de contrainte. Vous trouverez ci-dessous la hiérarchie de la présentation XML. Le problème, c’est qu’il ne fait pas défiler vers le bas, mais uniquement les 10 premières vues. Les 3 derniers champs sont masqués car la vue ne défile plus.

DISPOSITION DES PARENTS

<Android.support.constraint.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:id="@+id/activity_register"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:focusableInTouchMode="true"
Android:orientation="vertical">

<!-- Textview and a button -->

  <ScrollView
    Android:id="@+id/scrollView"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_marginBottom="10dp"
    Android:layout_marginTop="10dp"
    Android:orientation="vertical"
    Android:overScrollMode="never"
    Android:scrollbars="none"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/view"
    tools:layout_constraintBottom_creator="1"
    tools:layout_constraintLeft_creator="1"
    tools:layout_constraintRight_creator="1"
    tools:layout_constraintTop_creator="1"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="0dp">


  <Android.support.constraint.ConstraintLayout
        Android:id="@+id/constraintLayout"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical">

                <!-- Child Views (12/13 views of the fields)-->

  </Android.support.constraint.ConstraintLayout>

</ScrollView>

</Android.support.constraint.ConstraintLayout>
17
Maheshwari Reddy

Cette disposition fonctionne dans mon application . L'astuce consiste à définir ces deux attributs dans ScrollView: Android: layout_height = "0dp" App: layout_constraintBottom_toBottomOf = "parent"

La mise en page simplifiée de mon application:

<?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"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:theme="@style/ThemeOverlay.AppCompat.Light">

    <RelativeLayout
        Android:id="@+id/linear"
        Android:layout_width="0dp"
        Android:layout_height="56dp"
        Android:background="@color/title"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ScrollView
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/linear">

        <Android.support.constraint.ConstraintLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">

            <TextView
                Android:id="@+id/titleView"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginLeft="8dp"
                Android:layout_marginStart="8dp"
                Android:text="@string/title"
                Android:textSize="14sp"
                app:layout_constraintBaseline_toBaselineOf="@+id/title"
                app:layout_constraintLeft_toLeftOf="parent" />

            <EditText
                Android:id="@+id/title"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_marginEnd="8dp"
                Android:layout_marginRight="8dp"
                Android:hint="toilet title"
                Android:inputType="text"
                Android:textColor="@Android:color/holo_red_dark"
                Android:textSize="12sp"
                app:layout_constraintLeft_toLeftOf="@+id/open_hour"
                app:layout_constraintLeft_toRightOf="@+id/titleView"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
            ...
            Other Views in ScrollView
            ...
        </Android.support.constraint.ConstraintLayout>
    </ScrollView>
</Android.support.constraint.ConstraintLayout>
34
ping li

Deux étapes

  1. Conserver la hauteur de la présentation pour la vue de défilement zéro
    Android:layout_height="0dp" 

  2. Encore une fois pour la vue de défilement
    Android:fillViewport="true"

6
Harsh Phoujdar

Essayez d'ajouter la contrainte de fond à scrollview (par exemple: app:layout_constraintBottom_toBottomOf="parent") Et changez Android: layout_height = "wrap_content" en Android:layout_height="0dp"

6
samaludheen cignes

Dans mon cas, NestedScrollView a travaillé au lieu de ScrollView. Voici l'extrait de ma mise en page de travail:

<Android.support.constraint.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="match_parent">

    <!-- Some Views Here -->

    <Android.support.v4.widget.NestedScrollView
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:fillViewport="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view">

        <Android.support.constraint.ConstraintLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">

            <!-- Some Views That can be Scrolled Here -->

        </Android.support.constraint.ConstraintLayout>

    </Android.support.v4.widget.NestedScrollView>

</Android.support.constraint.ConstraintLayout>
2
Firoz Memon

Il suffit de mettre Android:fillViewport="true" dans la disposition parente

1
KKumar Technologies

Vous avez deux solutions à ce problème (la même solution mais de deux manières):

  1. Si vous mettez le Mode Création dans Android Studio, sélectionnez votre onglet Attributs ScrollView et Open et, dans la page layout_height, sélectionnez " match_constraint ".

  2. Si vous utilisez le mode Texte dans Android Studio, utilisez ceci:

    <ScrollView
    Android:layout_width="match_parent"
    Android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tb_details">
    

Vérifiez que la hauteur de ScrollView est définie sur 0dp. Ces deux méthodes permettent de résoudre le même problème, mais ce sont les différentes manières de le faire.

ScrollView n'est pas la vue racine, j'ai une mise en page Constraint enveloppant le ScrollView comme vous.

1
Sergio

Dans mon cas, j'avais une TextView haute (hauteur définie à wrap_content) dans une ScrollView (hauteur définie à 0dp et contrainte en haut et en bas). Aucune suggestion n'a fonctionné, mais j'ai résolu le problème en encapsulant la TextView dans une FrameLayout (hauteur définie sur wrap_content).

0
oblakr24