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 बारे में पूछ रहा हूं)।


आउटडेटेड: बेहतर उत्तर देखें

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

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

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

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

मैं वादा नहीं कर सकता कि यह नया फीचर 1.0 रिलीज से पहले इसे बना देगा।

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


अपडेट किया गया (कॉन्ट्राटाइनलआउट १.१। +)

app:layout_constrainedWidth="true" उपयोग करें app:layout_constrainedWidth="true" साथ चौड़ाई से लेकर wrap_content सेट करें

पहले (पदावनत):

app:layout_constraintWidth_default="wrap" सेट की गई चौड़ाई के साथ app:layout_constraintWidth_default="wrap"


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

ConstraintLayout 1.1 के जारी होने के बाद से पुराना app:layout_constraintWidth_default="wrap" और app:layout_constraintHeight_default="wrap" विशेषताओं को अब app:layout_constraintHeight_default="wrap" गया है

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

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

app: layout_constrainedWidth = "सही | गलत" ऐप: लेआउट_कॉस्ट्रैन्डहेड = "सही और गलत"

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


मैं इस एक का उपयोग करें

app:layout_constraintEnd_toEndOf="parent"

@ nicolas-roard app:layout_constraintWidth_default="wrap" का उत्तर app:layout_constraintWidth_default="wrap" और android:layout_width="0dp" अब android:layout_width="0dp" है।

आगे बढ़ें और app:layout_constrainedWidth="true" उपयोग करें app:layout_constrainedWidth="true" और android:layout_width="wrap_content"

पदावनति का कारण, मुझे नहीं पता। लेकिन कांस्ट्रेन्थलाईट के स्रोत कोड में इसका अधिकार है







constraint-layout