android स्क्रीन के बाहर एक constraintLayout फैलाव के अंदर Wrap_content दृश्य




android-layout android-constraintlayout (5)

मैं एक ConstraintLayout का उपयोग कर एक साधारण चैट बबल लागू करने की कोशिश कर रहा हूँ। यही वह है जिसे मैं प्राप्त करने की कोशिश कर रहा हूं:

हालांकि, wrap_content बाधाओं के साथ ठीक से काम नहीं कर रहा प्रतीत होता है। यह मार्जिन का सम्मान करता है, लेकिन उपलब्ध स्थान की उचित गणना नहीं करता है। मेरा लेआउट यहाँ है:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/chat_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintHorizontal_bias="0"
        tools:background="@drawable/chat_message_bubble"
        tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sodales accumsan tortor at bibendum."
        android:layout_marginStart="64dp"
        android:layout_marginLeft="64dp"
        android:layout_marginEnd="32dp"
        android:layout_marginRight="32dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp" />
</android.support.constraint.ConstraintLayout>

यह निम्नानुसार प्रस्तुत करता है:

मैं com.android.support.constraint:constraint-layout:1.0.0-beta4 का उपयोग कर रहा हूं com.android.support.constraint:constraint-layout:1.0.0-beta4

क्या मुझसे कुछ गलत हो रही है? क्या यह एक बग या सिर्फ एक अनजान व्यवहार है? क्या मैं एक ConstraintLayout का उपयोग कर उचित व्यवहार प्राप्त कर सकता हूं (मुझे पता है कि मैं अन्य लेआउट का उपयोग कर सकता हूं, मैं विशेष रूप से ConstrainLayout बारे में पूछ रहा हूं)।


आपको प्रतिस्थापित करना चाहिए

android:layout_width="wrap_content"

साथ में

android:layout_width="match_parent"

अपने टेक्स्ट व्यू से और फिर तदनुसार पैडिंग और मार्जिन समायोजित करें। मैंने आपका कोड अपडेट किया है,

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
    android:id="@+id/chat_message"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="10dp"
    android:layout_marginLeft="60dp"
    android:layout_marginRight="10dp"
    android:layout_marginStart="60dp"
    android:layout_marginTop="8dp"
    android:padding="16dp"
    app:layout_constraintTop_toTopOf="parent"
    tools:background="#c9c7c7"
    tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sodales accumsan tortor at bibendum." />

आपको यह परिणाम मिल जाएगा


नहीं, आप जो भी चाहते हैं वह आप नहीं कर सकते हैं क्योंकि यह आज है (1.0 बीटा 4):

  • wrap_content केवल विजेट को मापने के लिए कहता है, लेकिन अंतिम बाधाओं के खिलाफ अपने विस्तार को सीमित नहीं करेगा
  • match_constraints (0dp) बाधाओं के खिलाफ विजेट के आकार को सीमित कर देगा ... लेकिन अगर आप wrap_content छोटा होता (आपका पहला उदाहरण), तो आप उससे मेल wrap_content , जो आप नहीं चाहते हैं।

तो अभी, आप उस विशेष मामले के लिए भाग्य से बाहर हैं: - /

अब ... हम इस सटीक परिदृश्य से निपटने के लिए match_constraints अतिरिक्त क्षमताओं को जोड़ने के बारे में सोच रहे हैं (जब तक आकार बाधाओं से अधिक नहीं होता है तब तक wrap_content रूप में व्यवहार करना)।

मैं वादा नहीं कर सकता कि यह नई सुविधा इसे 1.0 रिलीज से पहले कर देगी।

संपादित करें : हमने विशेषता app:layout_constraintWidth_default="wrap" साथ इस क्षमता को 1.0 में जोड़ा था app:layout_constraintWidth_default="wrap" (चौड़ाई सेट 0 डीपी के साथ)। यदि सेट किया गया है, तो विजेट के समान आकार होगा जैसे wrap_content का उपयोग करना, लेकिन बाधाओं से सीमित होगा (यानी यह उनके आगे विस्तार नहीं करेगा)


मैं इसका इस्तेमाल करता हूं

app:layout_constraintEnd_toEndOf="parent"

अन्य उत्तरों की तरह पहले से ही कहा गया है, क्योंकि ConstraintLayout 1.0 इसे प्राप्त करना संभव है, लेकिन नवीनतम रिलीज (1.1.x) के रूप में उन्होंने बदल दिया है कि आप इसे कैसे करते हैं।

ConstraintLayout 1.1 की पुरानी app:layout_constraintWidth_default="wrap" की रिलीज के बाद से app:layout_constraintWidth_default="wrap" और app:layout_constraintHeight_default="wrap" विशेषताएँ अब बहिष्कृत की गई हैं

यदि आप एक wrap_content व्यवहार प्रदान करना चाहते हैं, लेकिन फिर भी अपने दृश्य पर बाधाओं को लागू करते हैं, तो आपको app:layout_constrainedWidth=”true|false” के साथ संयुक्त रूप से wrap_content अपनी चौड़ाई और / या ऊंचाई सेट करनी चाहिए app:layout_constrainedWidth=”true|false” और / या app:layout_constrainedHeight=”true|false” डॉक्स पर बताए गए app:layout_constrainedHeight=”true|false” गुण:

WRAP_CONTENT: बाधाओं को लागू करना (1.1 में जोड़ा गया) यदि कोई आयाम WRAP_CONTENT पर सेट किया गया है, तो 1.1 से पहले संस्करणों में उन्हें एक शाब्दिक आयाम के रूप में माना जाएगा - जिसका अर्थ है कि बाधा परिणामस्वरूप आयाम को सीमित नहीं करेगी। सामान्य रूप से यह पर्याप्त (और तेज़) है, कुछ परिस्थितियों में, आप WRAP_CONTENT का उपयोग करना चाहेंगे, फिर भी परिणामी आयाम को सीमित करने के लिए बाधाओं को लागू करना जारी रखें। उस स्थिति में, आप संबंधित विशेषता में से एक जोड़ सकते हैं:

ऐप: layout_constrainedWidth = "true | false" ऐप: layout_constrainedHeight = "true | false"

नवीनतम रिलीज के लिए, जब तक मैंने इसका उत्तर दिया है, तो ConstraintLayout संस्करण 1.1.2 पर है


हां, जैसा कि app:layout_constraintWidth_default="wrap" द्वारा दिए गए उत्तर में उल्लिखित है, आपको app:layout_constraintWidth_default="wrap" जोड़ना चाहिए app:layout_constraintWidth_default="wrap" और चौड़ाई 0 डीपी सेट करें। और अपने बबल को संरेखित करने के लिए आपको layout_constraintHorizontal_bias लिए 1.0 सेट करना चाहिए।

अंतिम स्रोत कोड यहां दिया गया है:

<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/chat_message"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginStart="64dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintWidth_default="wrap"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:background="@drawable/chat_message_bubble"
        android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sodales accumsan tortor at bibendum." />

</android.support.constraint.ConstraintLayout>

नतीजतन ऐसा लगता है:





constraint-layout