Seguimos con el ejercicio planteado ConstraintLatoutLogin. Como ya se comentó, el componente edtUser no ocupa todo el ancho de la pantalla, con lo cual se centra en el espacio disponible si tiene el atributo android:layout_width="wrap_content". Este <strong>Layout</strong> ofrece un parámetro _bias que permite desplazar una vista en términos de porcentajes (0% a 100%) o fracciones (0 a 1) en el eje horizontal o vertical con respecto a los anclajes que tiene el componente, es lo que se conoce como sesgo.
Si se mueve el sesgo horizontal en edtUser al valor 30%, lo que hace es que la vista se desplaza hacia la izquierda, dejando 1/3 del espacio disponible a la izquierda y 2/3 a la derecha. Este comportamiento se utiliza para garantizar que una vista tenga la misma posición independientemente de la densidad y tamaño de la pantalla.

La guía es una herramienta que se utiliza en la vista de diseño para poder alinear las vistas en base a un elemento pero que no se verá en el diseño de nuestra aplicación. Esta guía evita añadir en todos las vistas un margen concreto sino que se añade la restricción que la vista empieza al principio de la guía:
<span class="codigo"> app:layout_constraintStart_toStartOf="@+id/guideline"</span>
En la parte superior del diseño aparece el icono de la guía
y se puede alternar entre los tipos haciendo clic repetidamente en el icono. Por defecto se indica un desplazamiento fijo en dp desde el borde inicial del layout ConstraintLayout, a continuación el desplazamiento fijo contando desde el final de la pantalla y finalmente el porcentaje del desplazamiento en base al ancho de la pantalla.
La barrera es una vista "invisible", pero que su efecto se muestra en tiempo de ejecución. Al igual que pasa con la guía, las vistas se limitan a la barrera, de forma que si una vista crece (porque el texto a mostrar aumenta, ya que hay un cambio de idioma en el dispositivo), la barrera ajustará su tamaño a la altura o anchura más grande de los elementos referenciados sin que se solape ninguna vista. Las barreras pueden ser verticales u horizontales y pueden crearse en la parte superior, inferior, izquierda o derecha de las vistas referenciadas.
Es curioso ver el código de las barreras en XML. En primer lugar, se debe establecer la dirección de la barrera. En el ejemplo ConstraintLayoutLogin la barrera se posiciona al final de txvUser o txvPassword dependiendo de cuál sea el más grande. A continuación se necesita un atributo para definir los ID de las múltiples vistas a las que hace referencia la barrera.
<android.support.constraint.Barrier"<br />
android:id="@+id/barrier"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
app:constraint_referenced_ids="edtUser,edtPassword"<br />
En el siguiente vídeo se muestra cómo crear una barrera:
Finalmente, las cadenas son un tipo específico de restricción que permite compartir espacio entre las vistas que pertenecen a la cadena y controlar cómo se divide el espacio disponible entre ellas. Esta restricción se utiliza mucho para centrar dos botones con respecto al eje horizontal. Para crear una cadena se siguen los siguientes pasos:
- Añadir dos botones btnLogin y
btnSignUp.
- Seleccionar los botones pulsando la tecla <strong><abbr title="Control" lang="en">Ctrl</abbr></strong> -> opción <strong><span lang="en">Chains</span></strong> del menú contextual -> Create Horizontal Chain.
Se puede comprobar como una cadena une las dos vistas.

Si se quiere explorar algunos de los modos de cadena, hay que hacer clic en una de las vistas de la cadena en el panel <strong><span lang="en">Component Tree</span></strong>, mostrar el menú contextual y seleccionar la opción <strong><span lang="en">Cicle Chain Mode</span></strong>. Se puede simplificar en tres modos:
- Empaquetado (paqued): los elementos se agrupan en el centro del espacio disponible. En esta opción se puede utilizar márgenes para separar las vistas ligeramente. Con esta opción y utilizando las _bias se pueden centrar todas las vistas aplicando un sesgo de 0.5 o bien desplazar la cadena hacia un lado.
- Distribución (spread): los elementos se extienden por el espacio disponible, como se muestra arriba.
- Separación en el interior (spread_inside): similar a la opción anterior, pero las vistas finales de la cadena no se extienden.
No existe un atributo específico en XML que se asigne a todas las vistas, sino que se establece el atributo app:layout_constraintHorizontal_chainStyle="spread" en una de las vistas de la cadena.