support studio linearlayout inside habilitar full dentro constraintlayout constraint android android-layout constraints scrollview android-constraintlayout

android - studio - El diseño de la restricción dentro de Scrollview no se desplaza a la parte inferior de la restricción principal



scrollview android constraintlayout (8)

Dos pasos

  1. Mantenga la altura del diseño para la vista de desplazamiento cero
    android:layout_height="0dp"

  2. De nuevo para la vista de desplazamiento
    android:fillViewport="true"

Tengo un formulario que tiene alrededor de 12/13 campos. Utilicé un Scrollview dentro de un diseño de restricción. A continuación se muestra la jerarquía del diseño XML. El problema es que no se desplaza hacia la parte inferior, sino que se desplaza solo a las primeras 10 vistas iniciales. Los últimos 3 campos se ocultan a medida que la vista no se desplaza más.

DISEÑO DE PADRES

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


En mi caso, NestedScrollView funcionó en lugar de ScrollView . A continuación se muestra el fragmento de mi diseño de trabajo:

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


En mi caso, NestedScrollView funcionó en lugar de ScrollView .

A continuación se incluye un fragmento de mi diseño de trabajo: asegúrese de que no haya hecho ninguna altura de vista infantil para que coincida con el padre (0 dp) dentro de constrianlayout también para la vista de desplazamiento android: fillViewport = "true ;

Pregúntame si tiene alguna duda.

<android.support.v4.widget.NestedScrollView android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="@dimen/_90sdp" android:fillViewport="true"> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="0dp" android:id="@+id/cvLayout" android:animateLayoutChanges="true">


En mi caso, tuve un TextView alto (altura establecida en wrap_content ) dentro de un ScrollView (altura establecida en 0dp y con restricciones en la parte superior e inferior). No funcionó ninguna sugerencia, pero resolví el problema envolviendo TextView dentro de un FrameLayout (altura establecida en wrap_content ).


Este diseño funciona en mi aplicación. El truco es configurar estos dos atributos en ScrollView: android: layout_height = "0dp" app: layout_constraintBottom_toBottomOf = "parent"

El diseño simplificado de mi aplicación:

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


Intente agregar la restricción inferior a scrollview (por ejemplo: app:layout_constraintBottom_toBottomOf="parent" ) y cambie android: layout_height = "wrap_content" a android:layout_height="0dp"


Simplemente ponga android:fillViewport="true" en el diseño de los padres


Tiene dos soluciones para este problema (la misma solución pero de dos maneras de hacerlo):

  1. Si pone el modo de diseño en Android Studio, seleccione su ScrollView y abra la pestaña de atributos y en la layout_height, seleccione " match_constraint ".

  2. Si usa el modo de texto en Android Studio, use esto:

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

Ver que la altura de ScrollView se establece en 0dp. Ambas formas resuelven el mismo problema pero estas son las diferentes formas de hacerlo.

ScrollView no es la vista raíz, tengo un diseño de Restricción que ajusta ScrollView como usted.