2011-10-08 14 views
7

क्यों मेरी रिश्तेदार लेआउट पूरी स्क्रीन की चौड़ाई पर कब्जा करताक्यों मेरी रिश्तेदार लेआउट पूरी स्क्रीन की चौड़ाई पर कब्जा

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#f00" 
    > 
    <Button 
     android:id="@+id/Button01" 
     android:text="Press Here" 
     android:layout_alignParentRight="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"></Button> 
    <Button 
     android:id="@+id/Button02" 
     android:text="02" 
     android:layout_alignParentLeft="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"></Button> 
</RelativeLayout> 

मैं रिश्तेदार लेआउट निर्दिष्ट किया है "wrap_content", तो क्यों यह पूर्ण स्क्रीन स्थान में समा करता है। बाहर रखा गया है भले ही मैं एंड्रॉइड कहूं: layout_width = "fill_parent"। Enlighten

कृपया मुझे प्रबुद्ध करें!

संपादित करें: मुझे लगता है कि मैं पहले अपने प्रश्न से बहुत स्पष्ट नहीं था। इसके लिए माफ़ी। जब मेरे पास एक सापेक्ष लेआउट में 2 बच्चे के विचार होते हैं और उनमें से एक को माता-पिता के साथ गठबंधन किया जाता है और अन्य सही गठबंधन होता है और रिश्तेदार लेआउट चौड़ाई WRAP_CONTENT है तो मुझे उम्मीद है कि लेआउट चौड़ाई केवल 2 बटनों की चौड़ाई के बराबर होगी (isn ' टी WRAP_CONTENT का मतलब क्या है ??)। मुझे पता है कि UI आईएम को प्राप्त करने के अन्य तरीके हैं लेकिन मैं बस इन सापेक्ष लेआउट टैग को सही ढंग से समझने की कोशिश कर रहा हूं।

संपादित करें 2: मैंने थोड़ा प्रयोग किया है और ऐसा लगता है कि अगर हम अपने माता-पिता की चौड़ाई WRAP_CONTENT के रूप में लेआउट_एलिग पेरेंट राइट का उपयोग करते हैं तो ऊपरी लेआउट चौड़ाई गणना के लिए उपयोग की जाती है (जैसे नीचे दिए गए कुछ उत्तरों)। लेकिन हम केवल layout_alignParentLeft का उपयोग कर रहे हैं, तो यह अपेक्षित के रूप में काम करता है और लेआउट चौड़ाई पूरी स्क्रीन तक नहीं बढ़ रही है। लोगों को मदद के लिए धन्यवाद!

android:layout_alignParentRight="true" 

बनाता है यही कारण है कि अपने लेआउट चौड़ाई में माता-पिता को भरने:

उत्तर

13

अन्य उत्तरों ने सही ढंग से बताया है कि जब आपके रिश्तेदार लेआउट की चौड़ाई wrap_content पर सेट की जाती है, और उसके बच्चे बाएं और दाएं दोनों के साथ गठबंधन होते हैं, तो सापेक्ष लेआउट अपने माता-पिता की चौड़ाई लेता है - इस मामले में, पूरी स्क्रीन । यदि, हालांकि, दोनों बच्चों को एक तरफ गठबंधन किया गया था, सापेक्ष लेआउट व्यापक बच्चे के रूप में चौड़ा होगा।

अब यदि आप दो बटन एक-दूसरे के बगल में रखना चाहते हैं, और सापेक्ष लेआउट बटन की चौड़ाई के योग के रूप में चौड़े होने के लिए, थोड़ा अलग दृष्टिकोण की आवश्यकता है। माता-पिता से संबंधित दोनों बटनों को पोजिशन करने के बजाय, केवल एक बटन के साथ ऐसा करें (उदाहरण के लिए, पहला वाला)। मान लें कि इसकी स्थिति अपरिवर्तित बनी हुई है (android:layout_alignParentRight="true")। अब बटन दाईं ओर तैरता है, इसलिए दूसरा बटन, इसके बगल में स्थित होने के लिए, पहले बटन के बाईं तरफ गठबंधन किया जाना चाहिए। इस प्रकार, हम बस android:layout_toLeftOf="@id/Button01" जोड़ें (और android:layout_alignParentLeft="true" भाग हटाएं)।

अधिक के लिए, मेरा सुझाव है कि आप relative layouts पर एक बहुत ही अनुकूल ट्यूटोरियल देखें।

+0

उत्तर अर्नेस्ता के लिए धन्यवाद! यह अब चीजों को थोड़ा स्पष्ट बना दिया। लेकिन मैं अभी भी थोड़ा सा मारा है कि सापेक्ष लेआउट अपने माता-पिता की चौड़ाई के लिए क्यों दिखता है अगर उसके बच्चे दोनों बाएं और दाएं किनारों पर गठबंधन होते हैं। और प्रतिष्ठा पर सदी तक पहुंचने के लिए हे बधाई !! – Santosh

+3

धन्यवाद :)। इस बारे में सोचें: 'wrap_content' का अर्थ है * किसी के बच्चों द्वारा ली गई जगह के रूप में चौड़ा होना। * अब यदि आप एक बच्चा लेते हैं और' alignParentRight 'कहते हैं, तो इसे अपने माता-पिता के दाहिने ओर जाना चाहिए। लेकिन माता-पिता कितना चौड़ा है? खैर, * किसी के बच्चों द्वारा ली गई जगह के रूप में चौड़ा। * दूसरे शब्दों में, माता-पिता अपने चौड़ाई का निर्णय अपने बच्चों को छोड़ देता है। और बच्चे अपने माता-पिता द्वारा बाध्य नहीं होते हैं, इसलिए वे बहुत अंत तक जाते हैं - जो माता-पिता का कंटेनर होता है। – ernes7a

+0

अच्छी व्याख्या। धन्यवाद! – Santosh

1

इस लाइन "प्रेस यहाँ" बटन (Button01) सही करने के लिए संरेखित करता है।

3

कारण आप एक

 android:layout_alignParentLeft="true" 

चौड़ाई एक वस्तु है, और एक

 android:layout_alignParentRight="true" 

चौड़ाई किसी अन्य वस्तु है, तो लेआउट दोनों पक्ष तक फैली हुई है, तो आप पूरी चौड़ाई लेआउट दे रही है।

लेकिन जब आप लेआउट_alignParentXXXXX का उपयोग करते हैं, और आप पैरेंट WRAP_CONTENT में डालते हैं, जो बच्चों को चौड़ाई परिभाषित के साथ ऊपरी लेआउट पर जाने देता है।

+0

उत्तर के लिए धन्यवाद, लेकिन यह मेरे लिए बहुत स्पष्ट नहीं है। क्या आप कह रहे हैं कि यदि हम लेआउट_alignParentXXXX का उपयोग करते हैं और माता-पिता की चौड़ाई WRAP_CONTENT है, तो गणना के लिए ऊपरी लेआउट (पैरेंट की पैरेंट) चौड़ाई का उपयोग किया जाता है ?? क्या यह सच है? – Santosh

+0

मेरे अनुभव ने मुझे बताया कि, लेकिन आप कोशिश कर सकते हैं, 50 डीप के उदाहरण के लिए एक चौड़ाई के साथ एक और ऊपरी रैखिक लयआउट डालें और परिणाम देखें :) –

+0

मैंने थोड़ा प्रयोग किया है और ऐसा लगता है कि हम लेआउट_एलीघेंट राइट का उपयोग अपने माता-पिता की चौड़ाई के साथ WRAP_CONTENT के रूप में करते हैं तो ऊपरी लेआउट चौड़ाई गणना के लिए प्रयोग की जाती है (जैसे आपने बताया)। लेकिन हम केवल layout_alignParentLeft का उपयोग कर रहे हैं, तो यह अपेक्षित के रूप में काम करता है और लेआउट चौड़ाई पूरी स्क्रीन तक नहीं बढ़ रही है। मदद Quiroga के लिए धन्यवाद! – Santosh

0

एक और समस्या जिसका सामना आप कर सकते हैं यह है कि यदि आप अपने 2 बच्चों को "पैरेंट दाएं संरेखित करें" + "wrap_content", और अपने सापेक्ष लेआउट को "wrap_content" पर सेट करते हैं, और वह सापेक्ष लेआउट पूर्ण स्क्रीन में निहित है लाइनर आपके रिश्तेदार के बाहर लेआउट पूरे LinearLayout चौड़ाई पर कब्जा करेगा।

यदि आप इसे "संरेखित पैरेंट बाएं" दोनों के साथ करते हैं, तो सापेक्ष लेआउट बाईं ओर चिपक जाता है, और इसकी चौड़ाई वास्तव में एक "लपेट सामग्री" है। लेकिन व्यवहार "पैरेंट दाएं संरेखित" के लिए अलग है, यह थोड़ा अजीब है।

वर्कअराउंड:

कि इस मुद्दे को हल करने के लिए (मैं सही करने के लिए बच्चों में से एक को संरेखित करने के लिए किया था), मैं वास्तव में और करने के लिए बच्चों को गद्दी के साथ खेला "जनक छोड़ दिया संरेखित" के लिए 2 बच्चों के सेट ऊपरी दाएं कोने पर स्थित बच्चों में से एक प्राप्त करें। यह एक गंदा कामकाज है लेकिन अब मुझे केवल एक ही मिला है।

संभव क्लीनर समाधान:

एक और चाल एक FrameLayout अंदर 2 LinearLayout डाल करने के लिए, तो प्रत्येक LinearLayout में अपने वास्तविक बच्चों रखा, और खेलने के उन LinearLayout की गंभीरता के साथ सही स्थिति में बच्चों की स्थिति के लिए होगा ।

  • RelativeLayout
    • LinearLayout
      • बाल 1 (wrap_content)
    • LinearLayout (गुरुत्वाकर्षण: शीर्ष दाएं)
      • बाल 2 (wrap_content)
संबंधित मुद्दे