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.
Esto se basa totalmente en opiniones y mi impresión de ConstraintLayout
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:
Ejemplo de repositorio de Github: https://github.com/OnlyInAmerica/ConstraintLayoutPerf