Saltar al contenido

Diferencias entre ConstraintLayout y RelativeLayout

Solución:

Intención de ConstraintLayout es optimizar y aplanar la jerarquía de vistas de sus diseños aplicando algunas reglas a cada vista para evitar el anidamiento.

Las reglas te recuerdan RelativeLayout, por ejemplo, colocando la izquierda a la izquierda de alguna otra vista.

app:layout_constraintBottom_toBottomOf="@+id/view1"

diferente a RelativeLayout, ConstraintLayout ofertas bias valor que se utiliza para colocar una vista en términos de 0% y 100% de desplazamiento horizontal y vertical con respecto a los controladores (marcados con un círculo). Estos porcentajes (y fracciones) ofrecen un posicionamiento perfecto de la vista en 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 -->

Mango de línea de base (tubería larga con esquinas redondeadas, debajo del identificador del círculo) se usa para alinear el contenido de la vista con otra referencia de vista.

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

ingrese la descripción de la imagen aquí

Esto se basa totalmente en opiniones y mi impresión de ConstraintLayout

Propiedades equivalentes de diseño relativo y diseño de restricción

Propiedades equivalentes de diseño relativo y diseño de restricción

(1) Disposición relativa:

android:layout_centerInParent="true"    

(1) Equivalente de diseño de restricción:

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"

(2) Disposición relativa:

android:layout_centerHorizontal="true"

(2) Equivalente de diseño de restricción:

app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintEnd_toEndOf="parent"

(3) Disposición relativa:

android:layout_centerVertical="true"    

(3) Equivalente de diseño de restricción:

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"

(4) Disposición relativa:

android:layout_alignParentLeft="true"   

(4) Equivalente de diseño de restricción:

app:layout_constraintLeft_toLeftOf="parent"

(5) Disposición relativa:

android:layout_alignParentStart="true"

(5) Equivalente de diseño de restricción:

app:layout_constraintStart_toStartOf="parent"

(6) Disposición relativa:

android:layout_alignParentRight="true"

(6) Equivalente de diseño de restricción:

app:layout_constraintRight_toRightOf="parent"

(7) Disposición relativa:

android:layout_alignParentEnd="true"    

(7) Equivalente de diseño de restricción:

app:layout_constraintEnd_toEndOf="parent"

(8) Disposición relativa:

android:layout_alignParentTop="true"

(8) Equivalente de diseño de restricción:

app:layout_constraintTop_toTopOf="parent"

(9) Disposición relativa:

android:layout_alignParentBottom="true" 

(9) Equivalente de diseño de restricción:

app:layout_constraintBottom_toBottomOf="parent"

(10) Disposición relativa:

android:layout_alignStart="@id/view"

(10) Equivalente de diseño de restricción:

app:layout_constraintStart_toStartOf="@id/view"

(11) Disposición relativa:

android:layout_alignLeft="@id/view" 

(11) Equivalente de diseño de restricción:

app:layout_constraintLeft_toLeftOf="@id/view"

(12) Disposición relativa:

android:layout_alignEnd="@id/view"  

(12) Equivalente de diseño de restricción:

app:layout_constraintEnd_toEndOf="@id/view"

(13) Disposición relativa:

android:layout_alignRight="@id/view"

(13) Equivalente de diseño de restricción:

app:layout_constraintRight_toRightOf="@id/view"

(14) Disposición relativa:

android:layout_alignTop="@id/view"  

(14) Equivalente de diseño de restricción:

app:layout_constraintTop_toTopOf="@id/view"

(15) Disposición relativa:

android:layout_alignBaseline="@id/view" 

(15) Equivalente de diseño de restricción:

app:layout_constraintBaseline_toBaselineOf="@id/view"

(16) Disposición relativa:

android:layout_alignBottom="@id/view"

(16) Equivalente de diseño de restricción:

app:layout_constraintBottom_toBottomOf="@id/view"

(17) Disposición relativa:

android:layout_toStartOf="@id/view"

(17) Equivalente de diseño de restricción:

app:layout_constraintEnd_toStartOf="@id/view"

(18) Disposición relativa:

android:layout_toLeftOf="@id/view"  

(18) Equivalente de diseño de restricción:

app:layout_constraintRight_toLeftOf="@id/view"

(19) Disposición relativa:

android:layout_toEndOf="@id/view"

(19) Equivalente de diseño de restricción:

app:layout_constraintStart_toEndOf="@id/view"

(20) Disposición relativa:

android:layout_toRightOf="@id/view"

(20) Equivalente de diseño de restricción:

app:layout_constraintLeft_toRightOf="@id/view"

(21) Disposición relativa:

android:layout_above="@id/view" 

(21) Equivalente de diseño de restricción:

app:layout_constraintBottom_toTopOf="@id/view"

(22) Disposición relativa:

android:layout_below="@id/view" 

(22) Equivalente de diseño de restricción:

app:layout_constraintTop_toBottomOf="@id/view"

Reportado por @davidpbr ConstraintLayout rendimiento

Hice dos diseños similares de 7 niños, uno cada uno con un padre ConstraintLayout y RelativeLayout. Basado en la herramienta de seguimiento de métodos de Android Studio, parece que ConstraintLayout pasa más tiempo en onMeasure y realiza 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 cajero automático Nexus). Android 5.0.2

Comparación de rastreo de método rápido:

1

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *