बाधा लेआउट में बैरियर और दिशानिर्देश के बीच क्या अंतर है?


104

हाल ही में लागू करने की कोशिश कर Constraint Layoutरहा हूं, लेकिन मैंने पाया Barrierऔर Guidelineवही काम करता है। दोनों डिवाइडर की तरह काम करते हैं। क्या उनके बीच कोई अंतर है?

जवाबों:


223

बाधाओं का उपयोग कब करें

मान लें कि आपके पास TextViewडायनामिक हाइट्स के साथ दो विजेट हैं और आप Buttonसबसे ऊंचे से नीचे रखना चाहते हैं TextView:

कार्य दृश्य

लेआउट में सीधे लागू करने का एकमात्र तरीका एक क्षैतिज उपयोग करना है Barrier। यह Barrierआपको उन दो TextViewएस की ऊंचाई के आधार पर एक बाधा निर्दिष्ट करने की अनुमति देता है । फिर आप Buttonक्षैतिज के निचले हिस्से में अपने शीर्ष को कसते हैं 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>

दिशा निर्देशों का उपयोग कब करें

मान लें कि आप उपर्युक्त TextViewऊंचाइयों को स्क्रीन की ऊंचाई के 30% तक सीमित करना चाहते हैं , चाहे उनके पास कोई भी सामग्री क्यों न हो।

परीक्षा का दृश्य

यह लागू करने के लिए कि आपको Guidelineप्रतिशत स्थिति के साथ क्षैतिज जोड़ना चाहिए और उस TextViewतल को विवश करना चाहिए 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>

निष्कर्ष

फर्क सिर्फ इतना है के बीच Barrierऔर Guidelineवह यह है कि Barrier's स्थिति लचीला और हमेशा कई UI तत्व के आकार पर आधारित होने से उसमें मौजूद और है Guidelineस्थिति हमेशा तय हो गई है'।


एक मूल्यवान जवाब!
अलीरेज़ा नूराली

दावा: "लेआउट में सीधे लागू करने का एकमात्र तरीका एक क्षैतिज बैरियर का उपयोग करना है।" गलत है। आप इसके लिए एक दिशानिर्देश का उपयोग कर सकते हैं, दोनों पाठ बॉक्सों को एक दिशानिर्देश द्वारा नीचे विवश किया जा सकता है। (यानीapp:layout_constraintBottom_toTopOf="@id/guideline"
क्रिसपर

11

बैरियर पर आधिकारिक दस्तावेज :

एक बैरियर इनपुट के रूप में कई विजेट्स को संदर्भित करता है, और निर्दिष्ट पक्ष पर सबसे चरम विजेट के आधार पर एक आभासी दिशानिर्देश बनाता है। उदाहरण के लिए, एक बाईं बाधा सभी संदर्भित विचारों के बाईं ओर संरेखित होगी।

बैरियर पर प्रशिक्षण डॉक्स :

एक दिशानिर्देश के समान, एक बाधा एक अदृश्य रेखा है जिसे आप विचारों को विवश कर सकते हैं। एक बाधा को छोड़कर अपनी स्थिति को परिभाषित नहीं करता है; इसके बजाय, बाधा की स्थिति उसके भीतर निहित विचारों की स्थिति के आधार पर चलती है। यह तब उपयोगी होता है जब आप किसी विशिष्ट दृश्य के बजाय किसी दृश्य को देखने के लिए बाध्य करना चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.