Quiero hacer un diseño que me permita desplazarme hacia abajo usando un diseño de restricción, pero no sé cómo hacerlo. ¿Debería ScrollView
ser el padre de ConstraintLayout
alguien así?
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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:fillViewport="true">
<android.support.constraint.ConstraintLayout
android:id="@+id/Constraint"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
¿O al revés? Tal vez alguien pueda señalarme un buen tutorial sobre esto o dar un ejemplo, parece que no puedo encontrar uno.
Además, no sé si esto es un error o alguna configuración que no he configurado, pero he visto imágenes como esta:
donde hay algunos componentes fuera del plano "rectángulo azul" pero son visibles, mientras que de mi lado si coloco un componente en el "espacio en blanco" no puedo verlo ni moverlo a ningún lado, y aparece en el árbol de componentes .
ACTUALIZACIÓN
Encontré una manera de hacer que el diseño de restricción se pueda desplazar en la herramienta de diseño, usando una guía horizontal para empujar hacia abajo el borde del diseño de restricción y extenderlo más allá del dispositivo, después de eso, puede usar la guía como la nueva parte inferior del diseño de restricción para Anclar los componentes.
Hay un tipo de restricción que rompe la función de desplazamiento:
Solo asegúrese de no utilizar esta restricción en ninguna vista cuando desee
ConstraintLayout
que se pueda desplazar conScrollView
:Si elimina estos, su desplazamiento debería funcionar.
Explicación:
Establecer la altura del niño para que coincida con la de un
ScrollView
padre es contradictorio con lo que el componente debe hacer. Lo que queremos la mayor parte del tiempo es que un contenido de tamaño dinámico sea desplazable cuando sea más grande que una pantalla / marco; haciendo coincidir la altura con el padreScrollView
obligaría a que todo el contenido se muestre en un marco fijo (la altura del elemento primario), lo que invalidaría cualquier funcionalidad de desplazamiento.Esto también sucede cuando los componentes secundarios directos regulares se establecen en
layout_height="match_parent"
.Si desea que el elemento secundario
ScrollView
coincida con la altura del elemento primario cuando no hay suficiente contenido, simplemente configúreloandroid:fillViewport
como verdadero paraScrollView
.fuente
Usar NestedScrollView con viewport true funciona bien para mí
para Android x use esto
fuente
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Para resumir, básicamente ajusta su
android.support.constraint.ConstraintLayout
vistaScrollView
dentro del texto del*.xml
archivo asociado con su diseño.Ejemplo activity_sign_in.xml
Nota 1: las barras de desplazamiento solo aparecen si se necesita un ajuste de alguna manera, incluido el teclado emergente.
Nota 2: Tampoco sería una mala idea asegurarse de que su ConstraintLayout sea lo suficientemente grande como para alcanzar la parte inferior y los lados de cualquier pantalla, especialmente si tiene un fondo, ya que esto garantizará que no haya espacios en blanco extraños . Puede hacer esto con espacios si nada más.
fuente
Simplemente use el diseño de restricción dentro
NestedScrollView
oScrollView
.Eso es. disfruta tu codificación.
fuente
Para hacer un diseño desplazable, el diseño es correcto. No será desplazable hasta que haya una razón para desplazarse (como en cualquier otro diseño). Por lo tanto, agregue suficiente contenido y será desplazable, al igual que con cualquier diseño (lineal, relativo, etc.). Sin embargo, no puede desplazarse correctamente en Blueprint o en modo de diseño diseño cuando diseña con ConstraintLayout y ScrollView.
Sentido:
Puede hacer un diseño de restricción desplazable, pero no se desplazará correctamente en el editor debido a un error / escenario que no se consideró. Pero aunque el desplazamiento no funciona en el editor, funciona en dispositivos. (He realizado varios COnstraintLayouts de desplazamiento, así que lo he probado)
Nota
En cuanto a su código. Al ScrollView le falta una etiqueta de cierre, no sé si es el caso en el archivo o si es un error de copiar y pegar, pero es posible que desee verlo.
fuente
Para completar las respuestas anteriores, estoy agregando el siguiente ejemplo, que también tiene en cuenta el uso de la barra de aplicaciones. Con este código, el editor de diseño de Android Studio parece funcionar bien con ConstraintLayout.
fuente
necesita rodear mi diseño de restricción con una etiqueta ScrollView y le dio la propiedad android: isScrollContainer = "true".
fuente
Hay un error en la versión 2.2 que hace que sea imposible desplazarse por el diseño de restricción. Supongo que todavía existe. Puede usar LinearLayout o RelativeLayout alternativamente.
Además, consulte: ¿Es posible poner un diseño de restricción dentro de un ScrollView ?
fuente
Constraintlayout es el valor predeterminado para una nueva aplicación. Ahora estoy "aprendiendo a Android" y me costó mucho descubrir cómo manejar el código de "muestra" predeterminado para desplazarme cuando el teclado está activado. He visto muchas aplicaciones donde tengo que cerrar el teclado para hacer clic en el botón "enviar" y, a veces, no desaparece. Usando esta jerarquía [ScrollView / ContraintLayout / Fields] está funcionando bien ahora. De esta manera, podemos obtener los beneficios y la facilidad de uso de ConstraintLayout en una vista desplazable.
fuente
Retire el botón inferior de la vista de desplazamiento anidado y tome la distribución lineal como padre. Agregue la vista de desplazamiento inferior y anidada como sus hijos. Funcionará absolutamente bien. En manifiesto para la actividad, use esto: esto levantará el botón cuando se abra el teclado
fuente
¡Puedes usarlo
HorizontalScrollView
y funcionará también!fuente
Así es como lo resolví:
si está utilizando ScrollView anidado, es decir, ScrollView dentro de un RestraintLayout, utilice la siguiente configuración para ScrollView en lugar de "WRAP_CONTENT" o "MATCH_PARENT":
fuente
en la vista de desplazamiento, haga alto y ancho 0 agregue las restricciones Top_toBottomOfand y Bottom_toTopOf.
fuente
Para mí, ninguna de las sugerencias sobre la eliminación de restricciones inferiores o la configuración del contenedor de desplazamiento en verdadero parecía funcionar. Lo que funcionó: expandir la altura de las vistas individuales / anidadas en mi diseño para que se "extiendan" más allá del padre utilizando la opción "Expandir verticalmente" del Editor de diseño de restricciones como se muestra a continuación.
Para cualquier enfoque, es importante que las líneas de vista previa punteadas se extiendan verticalmente más allá de las dimensiones superior o inferior del padre
fuente