What is difference between Barrier and Guideline in Constraint Layout? What is difference between Barrier and Guideline in Constraint Layout? android android

What is difference between Barrier and Guideline in Constraint Layout?


When to use barriers

Assume you have two TextView widgets with dynamic heights and you want to place a Button just below the tallest TextView:

Task view

The ONLY way to implement that directly in the layout is to use a horizontal Barrier. That Barrier allows you to specify a constraint based on the height of those two TextViews. Then you constrain the top of your Button to the bottom of the 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>

When to use guidelines

Assume you want to restrict the above-mentioned TextView heights to 30% of screen height, no matter the content they have.

Test view

To implement that you should add horizontal Guideline with percentage position and constrain the TextView bottom to that 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

The only difference between Barrier and Guideline is that Barrier's position is flexible and always based on the size of multiple UI elements contained within it and Guideline's position is always fixed.


Official documentation on Barrier:

A Barrier references multiple widgets as input, and creates a virtual guideline based on the most extreme widget on the specified side. For example, a left barrier will align to the left of all the referenced views.

Training docs on Barrier:

Similar to a guideline, a barrier is an invisible line that you can constrain views to. Except a barrier does not define its own position; instead, the barrier position moves based on the position of views contained within it. This is useful when you want to constrain a view to the a set of views rather than to one specific view.


The voted answer is useful but if you need more examples and descriptions, I recommend you to read these articles:

Barrier

Guideline