Kısıt Düzeninde Bariyer ve Kılavuz arasındaki fark nedir?


92

Son zamanlarda uygulamaya çalışıyorum Constraint Layoutama aynı buldum Barrierve Guidelineçalışıyorum. Her ikisi de bölücü gibi çalışır. Aralarında bir fark var mı?

Yanıtlar:


201

Bariyerler ne zaman kullanılmalı

TextViewDinamik yüksekliklere sahip iki widget'ınız olduğunu Buttonve en yüksek olanın hemen altına bir tane yerleştirmek istediğinizi varsayalım TextView:

Görev görünümü

SADECE düzende doğrudan bu gerçekleştirmenin yolu yatay kullanmaktır Barrier. Bu Barrier, bu iki TextViews'nin yüksekliğine göre bir sınırlama belirlemenize izin verir . Sonra üstünü yatayın Buttonalt kısmı ile sınırlarsın 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>

Yönergeler ne zaman kullanılmalı

TextViewİçeriği ne olursa olsun, yukarıda belirtilen yükseklikleri ekran yüksekliğinin% 30'u ile sınırlamak istediğinizi varsayalım .

Test görünümü

Bunu uygulamak için Guideline, yüzde konumu ile yatay eklemeli ve TextViewaltını bununla sınırlamalısınız 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>

Sonuç

Aralarındaki tek fark Barrierve Guidelineolmasıdır Barrierpozisyonunu esnek ve her zaman içinde ihtiva edilen ve birden fazla kullanıcı arayüzü öğeleri büyüklüğüne göre olan Guidelinepozisyonu her zaman sabittir. '


Değerli Bir Cevap!
Alireza Noorali

İddia: "Bunu doğrudan düzende uygulamanın YALNIZCA yolu yatay bir Bariyer kullanmaktır." yanlış. Bunun için, her iki metin kutusunu da bir kılavuzla sınırlandırarak bunun için bir kılavuz kullanabilirsiniz. (Yaniapp:layout_constraintBottom_toTopOf="@id/guideline"
Chrispher

11

Bariyer ile ilgili resmi belgeler :

Bir Bariyer, girdi olarak birden çok parçacığa başvurur ve belirtilen taraftaki en uç parçacığa dayalı sanal bir kılavuz oluşturur. Örneğin, bir sol bariyer, başvurulan tüm görünümlerin soluna hizalanacaktır.

Barrier ile ilgili eğitim belgeleri :

Kılavuza benzer şekilde, bariyer, görünümleri sınırlayabileceğiniz görünmez bir çizgidir. Bir bariyerin kendi konumunu tanımlamaması dışında; bunun yerine, bariyer konumu, içinde bulunan görünümlerin konumuna göre hareket eder. Bu, bir görünümü belirli bir görünüm yerine bir dizi görünümle sınırlamak istediğinizde kullanışlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.