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
Mantenga la altura del diseño para la vista de desplazamiento cero
android:layout_height="0dp"
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):
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 ".
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.