Diferencias entre ConstraintLayout y RelativeLayout

Estoy confundido acerca de la diferencia entre ConstraintLayout y RelativeLayout. ¿Podría alguien por favor decirme las diferencias exactas entre ellos?

La intención de ConstraintLayout es optimizar y aplanar la jerarquía de vista de los diseños aplicando algunas reglas a cada vista para evitar anidar.

Las reglas le recuerdan a RelativeLayout , por ejemplo ajustando la izquierda a la izquierda de alguna otra vista.

 app:layout_constraintBottom_toBottomOf="@+id/view1" 

A diferencia de RelativeLayout , ConstraintLayout ofrece un valor de bias que se utiliza para posicionar una vista en términos de desplazamiento horizontal y vertical del 0% y del 100% con respecto a los identificadores (marcados con círculo). Estos porcentajes (y fracciones) ofrecen un posicionamiento sin fisuras de la vista a través de diferentes densidades y tamaños de pantalla.

 app:layout_constraintHorizontal_bias="0.33" <!-- from 0.0 to 1.0 --> app:layout_constraintVertical_bias="0.53" <!-- from 0.0 to 1.0 --> 

El mango de línea de base (tubo largo con esquinas redondeadas, debajo del asa de círculo) se utiliza para alinear el contenido de la vista con otra referencia de vista.

Las manijas cuadradas (en cada esquina de la vista) se utilizan para cambiar el tamaño de la vista en dps.

Introduzca aquí la descripción de la imagen

Esto es totalmente basado en la opinión y mi impresión de ConstraintLayout

Reportado por @davidpbr Rendimiento de ConstraintLayout

Hice dos diseños similares de 7 hijos, uno con un padre ConstraintLayout y RelativeLayout. Basado en la herramienta de rastreo de métodos de Android Studio, parece que ConstraintLayout pasa más tiempo en onMeasure y realiza un trabajo adicional en onFinishInflate.

Biblioteca utilizada (support-v4, appcompat-v7, …):

'Com.android.support.constraint: constraint-layout: 1.0.0-alpha1'

Dispositivos / versiones de Android reproducidas en: Samsung Galaxy S6 (SM-G920A. Lo sentimos, no hay atms Nexus). Android 5.0.2

Comparación rápida de rastreo de métodos:

1

Ejemplo de reporte de Github: https://github.com/OnlyInAmerica/ConstraintLayoutPerf

Una gran diferencia es que ConstraintLayout respeta las restricciones incluso si la vista se ha ido. Así que no romperá el diseño si tienes una cadena y quieres hacer desaparecer una vista en el medio.

La verdadera pregunta es, ¿hay alguna razón para usar cualquier diseño que no sea un diseño de restricción? Creo que la respuesta podría ser no.

Para aquellos que insisten que están dirigidos a los programadores novatos o similares, deben proporcionar alguna razón para que sean inferiores a cualquier otro diseño.

Los diseños de restricciones son mejores en todos los sentidos (cuestan 150k en tamaño APK). Son más rápidos, son más fáciles, son más flexibles, reaccionan mejor a los cambios, arreglan los problemas cuando los ítems desaparecen, se adaptan mejor a tipos de pantalla radicalmente diferentes y no usan un montón de bucle anidado con ese largo Dibujado estructura de árbol para todo. Usted puede poner cualquier cosa en cualquier lugar, con respecto a cualquier cosa, en cualquier lugar.

Ellos eran un poco screwy a mediados de 2016, donde el editor de diseño visual no era lo suficientemente bueno, pero son al punto que si usted está teniendo un diseño en absoluto, es posible que desee considerar seriamente el uso de un diseño de restricción, incluso Cuando hace lo mismo que un RelativeLayout, o incluso un LinearLayout simple. FrameLayouts claramente todavía tienen su propósito. Pero, no puedo ver la construcción de nada más en este punto. Si comenzaron con esto no habrían añadido nada más.

La única diferencia que he notado es que las cosas en un diseño relativo a través de arrastrar y soltar automáticamente tienen sus dimensiones relativas a otros elementos inferidos, por lo que cuando se ejecuta la aplicación lo que ves es lo que obtienes. Sin embargo, en la disposición de restricciones, incluso si arrastra y suelta un elemento en la vista de diseño, al ejecutar la aplicación, las cosas pueden cambiarse. Esto se puede solucionar fácilmente estableciendo manualmente las restricciones o, siendo un movimiento más arriesgado hacer clic con el botón derecho del ratón en el elemento del árbol de componentes, seleccionar el submenú de diseño de restricciones y hacer clic en "infer constraints". Espero que esto ayude

RelativeLayout patrón de diseño, que establece sus elementos de interfaz de usuario entre sí. Esto es similar a la clase ConstraintLayout, pero tiene que crear el XML, mientras que ConstraintLayout utiliza el Editor de diseño visual.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.