2017-04-17 13 views
20

एंड्रॉइड स्टूडियो (वी 2.3.1) के साथ match_parent को प्रतिस्थापित करता रहता है, एक निश्चित डीपी वैन्यू के साथ रिलेटिव लेआउट के match_parent को प्रतिस्थापित करता रहता है। उदाहरण के लिए, जब मैं चौड़ाई के रूप में match_parent टाइप करता हूं, तो यह इसे 368 डीपी के साथ बदल देता है। जब मैं ऐप का परीक्षण करता हूं, तो मुझे लगता है कि सापेक्ष लयआउट वास्तव में गलत है।एंड्रॉइड स्टूडियो निश्चित डीपी वैल्यू

क्या कोई यह जानता है कि इसे कैसे ठीक किया जाए?

<?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="match_parent" 
    tools:context="be.mawey.lamachat.LoginActivity"> 


    <RelativeLayout 
     android:layout_width="match_parent" <!-- THIS IS BEING REPLACED WITH 368dp --> 
     android:layout_height="match_parent" <!-- THIS IS BEING REPLACED WITH 495dp --> 
     tools:layout_editor_absoluteX="8dp" 
     tools:layout_editor_absoluteY="8dp"> 

     <Button 
      android:id="@+id/buttonLogin" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_alignParentStart="true" 
      android:layout_centerVertical="true" 
      android:background="@color/colorPrimary" 
      android:text="Login" 
      android:textColor="@android:color/white" 
      android:textSize="18sp" 
      tools:layout_editor_absoluteX="8dp" 
      tools:layout_editor_absoluteY="292dp" /> 

     <EditText 
      android:id="@+id/editTextCode" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_above="@+id/buttonLogin" 
      android:layout_alignParentStart="true" 
      android:ems="10" 
      android:hint="Secret code here" 
      android:inputType="numberPassword" 
      tools:layout_editor_absoluteX="8dp" 
      tools:layout_editor_absoluteY="234dp" /> 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:fontFamily="monospace" 
      android:text="example" 
      android:textAlignment="center" 
      android:textColor="@color/colorPrimaryDark" 
      android:textSize="36sp" 
      android:textStyle="italic" 
      tools:layout_editor_absoluteX="8dp" 
      tools:layout_editor_absoluteY="16dp" /> 
    </RelativeLayout> 

</android.support.constraint.ConstraintLayout> 
+0

बनाए रखने के लिए बनाए रखें match_parent निश्चित डीपी का उपयोग न करें। –

+0

आपका क्या मतलब है? मैं एक निश्चित डीपी का उपयोग नहीं करता, एंड्रॉइड स्टूडियो सिर्फ मुझे match_parent –

+0

का उपयोग नहीं करने देता है, क्या आप अपनी पूर्ण xml फ़ाइल –

उत्तर

24

enter image description here

की तरह के रूप में चित्र

+0

यह काम किया! धन्यवाद! –

0
<?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="match_parent"> 


    <Button 
     android:id="@+id/buttonLogin" 
     android:layout_width="0dp" 
     android:layout_height="50dp" 
     android:layout_alignParentStart="true" 
     android:layout_centerVertical="true" 
     android:background="@color/colorPrimary" 
     android:text="Login" 
     android:textColor="@android:color/white" 
     android:textSize="18sp" 
     tools:layout_constraintRight_creator="1" 
     tools:layout_constraintBottom_creator="1" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintRight_toRightOf="@+id/editTextCode" 
     tools:layout_constraintLeft_creator="1" 
     android:layout_marginBottom="169dp" 
     app:layout_constraintLeft_toLeftOf="@+id/editTextCode" /> 

    <EditText 
     android:id="@+id/editTextCode" 
     android:layout_width="0dp" 
     android:layout_height="50dp" 
     android:layout_above="@+id/buttonLogin" 
     android:layout_alignParentStart="true" 
     android:ems="10" 
     android:hint="Secret code here" 
     android:inputType="numberPassword" 
     tools:layout_constraintRight_creator="1" 
     tools:layout_constraintBottom_creator="1" 
     app:layout_constraintBottom_toTopOf="@+id/buttonLogin" 
     android:layout_marginStart="8dp" 
     android:layout_marginEnd="8dp" 
     app:layout_constraintRight_toRightOf="parent" 
     tools:layout_constraintLeft_creator="1" 
     android:layout_marginBottom="8dp" 
     app:layout_constraintLeft_toLeftOf="parent" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="0dp" 
     android:layout_height="50dp" 
     android:fontFamily="monospace" 
     android:text="example" 
     android:textAlignment="center" 
     android:textColor="@color/colorPrimaryDark" 
     android:textSize="36sp" 
     android:textStyle="italic" 
     tools:layout_constraintTop_creator="1" 
     tools:layout_constraintRight_creator="1" 
     android:layout_marginStart="8dp" 
     android:layout_marginEnd="8dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginTop="16dp" 
     tools:layout_constraintLeft_creator="1" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintTop_toTopOf="parent" /> 

    </android.support.constraint.ConstraintLayout> 
+0

यह मेरा लेआउट पागल हो गया, समस्या बाधा लेआउट –

18

में दिखाया गया है संक्षेप में इसे अभी करें:

आप ConstraintLayout के बच्चों के लिए आयाम के रूप में match_parent उपयोग नहीं कर सकते। आप 0dp जो "match_constraint" का अर्थ का उपयोग करें और माता-पिता के पक्षों के लिए पक्षों में रोके चाहिए:

android:layout_width="0dp" 
app:layout_constraintStart_toStartOf="parent" 
app:layout_constraintEnd_toEndOf="parent" 

या

android:layout_height="0dp" 
app:layout_constraintTop_toTopOf="parent" 
app:layout_constraintBottom_toBottomOf="parent" 

पृष्ठभूमि का एक सा के साथ (या - से मैं कहाँ का मानना ​​है भ्रम उपजी):

हालांकि मुझे सबूत नहीं मिल रहा है, और मेरे सहयोगी का दावा है कि मैं गलत हूं - मुझे यकीन है कि the android documentation for constraintLayout हमें layout_width याके मानों के रूप में "या तो 0 डीपी या match_parent" का उपयोग करने के लिए प्रेरित करता है, यह इंगित करने के लिए कि संबंधित दृश्य आयाम constraintLayout द्वारा निर्धारित बाधाओं का उपयोग करके निर्धारित किया जाना चाहिए (निर्दिष्ट निश्चित मान का उपयोग करने के बजाय या इसकी सामग्री के आयाम को निर्धारित करके)। मुझे भी यकीन है कि मैंने इस मान (match_parent) का उपयोग इस तरीके से किया था और यह एंड्रॉइडस्टूडियो 2.3.1 पर स्विच करने से पहले काम करता था।

चाहे मैं सही है या भ्रम का शिकार हो रहा है, तथ्य यह है कि वर्तमान में the documentation कहता है:

महत्वपूर्ण: MATCH_PARENT एक ConstraintLayout में निहित विजेट्स के लिए समर्थित नहीं है, हालांकि समान व्यवहार के साथ MATCH_CONSTRAINT का उपयोग करके परिभाषित किया जा सकता संबंधित बाएं/दाएं या ऊपर/नीचे बाधाएं "पैरेंट" पर सेट की जा रही हैं।

साथ ही, 0dp मूल्य एक ही माना जाता है के रूप में मुझे याद है यह प्रयोग किया जाता करने के लिए:

विजेट का आयाम एंड्रॉयड की स्थापना द्वारा निर्दिष्ट किया जा सकता: layout_width और एंड्रॉयड: layout_height 3 अलग विशेषताओं तरीके:

(...)

  • 0dp है, जो "MATCH_CONSTRAINT"
  • 01 के बराबर है का उपयोग करना

संपादक, "की कमी का अनुमान लगा" का उपयोग Sirnivas के जवाब के रूप में वास्तव में 0dp दृष्टिकोण का उपयोग करता।

नोट: "match_constraint" एक मान प्रतीत नहीं होता है जिसका उपयोग किया जा सकता है। 0dp बाधाओं से मेल खाने के लिए आयाम के लिए वास्तविक मान प्रतीत होता है।

+1

आप पूरी तरह से स्पष्ट (भ्रमित नहीं) प्रतीत होते हैं क्योंकि यह सही उत्तर है और इसे इस तरह चिह्नित किया जाना चाहिए था। मैंने स्वीकृत उत्तर की कोशिश की। इसमें बाल लेआउट और * अभी भी * ग़लत रूप से हार्डकोडेड डीपी मानों के लिए अर्थहीन अतिरिक्त विशेषताओं को जोड़ा गया। –

+0

धन्यवाद @MylesBennett, जानना अच्छा है। वर्तमान में स्वीकृत उत्तर के लिए - क्योंकि यह दृश्य संपादक का उपयोग करता है, यह हमें डेवलपर्स के रूप में बहुत कम नियंत्रण देता है और यह वास्तव में अतिरिक्त अवांछित मूल्यों का अनुमान लगा सकता है। –

संबंधित मुद्दे