Ostatnio próbowałem wdrożyć, Constraint Layout
ale znalazłem Barrier
i Guideline
działa to samo. Obie działają jak rozdzielacz. Czy jest między nimi jakaś różnica?
Ostatnio próbowałem wdrożyć, Constraint Layout
ale znalazłem Barrier
i Guideline
działa to samo. Obie działają jak rozdzielacz. Czy jest między nimi jakaś różnica?
Odpowiedzi:
Załóżmy, że masz dwa TextView
widżety z dynamicznymi wysokościami i chcesz umieścić Button
tuż pod najwyższym TextView
:
Tylko sposobem realizacji, które bezpośrednio w układzie jest użycie poziomej Barrier
. To Barrier
pozwala określić ograniczenie na podstawie wysokości tych dwóch TextView
s. Następnie ograniczasz górę swojego Button
do dołu poziomu 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>
Załóżmy, że chcesz ograniczyć wyżej wymienione TextView
wysokości do 30% wysokości ekranu, bez względu na zawartość, jaką zawierają.
Aby to zaimplementować, należy dodać pozycję poziomą Guideline
z pozycją procentową i ograniczyć do tego TextView
dół 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>
Jedyna różnica między Barrier
i Guideline
polega na tym Barrier
, że pozycja ta jest elastyczna i zawsze oparta na rozmiarze wielu zawartych w niej elementów interfejsu użytkownika, Guideline
a pozycja jest zawsze stała.
app:layout_constraintBottom_toTopOf="@id/guideline"
Oficjalna dokumentacja dotycząca Bariery :
Barrier odwołuje się do wielu widżetów jako danych wejściowych i tworzy wirtualne wytyczne w oparciu o najbardziej ekstremalny widżet po określonej stronie. Na przykład lewa bariera zostanie wyrównana do lewej strony wszystkich widoków, do których istnieją odniesienia.
Dokumentacja szkoleniowa dotycząca Bariery :
Podobnie jak wytyczna, bariera to niewidoczna linia, do której można ograniczyć widoki. Tyle że bariera nie określa swojej własnej pozycji; zamiast tego pozycja bariery przesuwa się na podstawie pozycji zawartych w niej widoków. Jest to przydatne, gdy chcesz ograniczyć widok do zestawu widoków, a nie do jednego określonego widoku.