récemment essayé d'implémenter Constraint Layout
mais j'ai trouvé Barrier
et Guideline
fonctionne de la même manière. Les deux fonctionnent comme un diviseur. Y a-t-il une différence entre eux?
QUAND UTILISER DES BARRIÈRES
Supposons que vous ayez deux widgets TextView
avec des hauteurs dynamiques et que vous souhaitiez placer un Button
juste en dessous du plus haut TextView
:
Le moyen [~ # ~] seulement [~ # ~] de mettre en œuvre cela directement dans la mise en page est d'utiliser un horizontal Barrier
. Ce Barrier
vous permet de spécifier une contrainte basée sur la hauteur de ces deux TextView
s. Ensuite, vous contraignez le haut de votre Button
au bas de son horizontal Barrier
.
<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:id="@+id/left_text_view"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginTop="8dp"
Android:layout_marginEnd="8dp"
Android:layout_marginStart="8dp"
Android:text="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Android:textSize="16sp"
Android:background="#AAA"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/right_text_view"
app:layout_constraintTop_toTopOf="parent" />
<TextView
Android:id="@+id/right_text_view"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginTop="8dp"
Android:layout_marginStart="8dp"
Android:layout_marginEnd="8dp"
Android:text="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
Android:textSize="16sp"
Android:background="#DDD"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/left_text_view"
app:layout_constraintTop_toTopOf="parent" />
<Android.support.constraint.Barrier
Android:id="@+id/barrier"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="left_text_view,right_text_view" />
<Button
Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginEnd="8dp"
Android:layout_marginStart="8dp"
Android:text="Button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/barrier" />
</Android.support.constraint.ConstraintLayout>
QUAND UTILISER LES DIRECTIVES
Supposons que vous souhaitiez limiter les hauteurs TextView
mentionnées ci-dessus à 30% de la hauteur de l'écran, quel que soit leur contenu.
Pour implémenter cela, vous devez ajouter Guideline
horizontal avec un pourcentage de position et contraindre le TextView
bottom à celui Guideline
.
<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:id="@+id/left_text_view"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_marginBottom="8dp"
Android:layout_marginEnd="8dp"
Android:layout_marginStart="8dp"
Android:layout_marginTop="8dp"
Android:background="#AAA"
Android:text="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/guideline"
app:layout_constraintEnd_toStartOf="@+id/right_text_view"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
Android:id="@+id/right_text_view"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_marginEnd="8dp"
Android:layout_marginStart="8dp"
Android:layout_marginTop="8dp"
Android:layout_marginBottom="8dp"
Android:background="#DDD"
Android:text="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
Android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/guideline"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/left_text_view"
app:layout_constraintTop_toTopOf="parent" />
<Button
Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginEnd="8dp"
Android:layout_marginStart="8dp"
Android:text="Button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline" />
<Android.support.constraint.Guideline
Android:id="@+id/guideline"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
app:layout_constraintGuide_percent="0.3" />
</Android.support.constraint.ConstraintLayout>
[~ # ~] conclusion [~ # ~]
La seule différence entre Barrier
et Guideline
est que la position de Barrier
est flexible et toujours basée sur la taille de plusieurs éléments d'interface utilisateur qu'elle contient et que la position de Guideline
est toujours fixe.
documentation officielle sur la barrière :
Une barrière référence plusieurs widgets en tant qu'entrée et crée une directive virtuelle basée sur le widget le plus extrême du côté spécifié. Par exemple, une barrière de gauche s'alignera à gauche de toutes les vues référencées.
Documents de formation sur la barrière :
Semblable à une ligne de conduite, une barrière est une ligne invisible à laquelle vous pouvez contraindre des vues. Sauf qu'une barrière ne définit pas sa propre position; au lieu de cela, la position de la barrière se déplace en fonction de la position des vues qu’elle contient. Cela est utile lorsque vous souhaitez limiter une vue à un ensemble de vues plutôt qu'à une vue spécifique.