2010-06-21 15 views
36

जब मेरे पास निम्न है, तो यह शीर्ष लेआउट दिखाता है जिसमें चार रंगों के साथ नीचे लेआउट क्षेत्र की तुलना में बहुत छोटा क्षेत्र होता है।एंड्रॉइड: लेआउट_वेट शुरुआती प्रश्न

http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout के अनुसार, जब आप लेआउट_वेट में अधिक जोड़ते हैं, तो इसे क्षेत्र में वृद्धि करनी चाहिए, लेकिन यह कोड में घट जाती है।

किसी भी मदद की सराहना की जाएगी।

अग्रिम धन्यवाद।

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="4"> 
     <TextView 
      android:text="red" 
      android:gravity="center_horizontal" 
      android:background="#aa0000" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_weight="3"/> 
     <TextView 
      android:text="green" 
      android:gravity="center_horizontal" 
      android:background="#00aa00" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_weight="1"/> 
     <TextView 
      android:text="blue" 
      android:gravity="center_horizontal" 
      android:background="#0000aa" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_weight="1"/> 
     <TextView 
      android:text="yellow" 
      android:gravity="center_horizontal" 
      android:background="#aaaa00" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_weight="1"/> 
    </LinearLayout> 

    <LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="1"> 
    <TextView 
     android:text="row one" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    <TextView 
     android:text="row two" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    <TextView 
     android:text="row three" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    <TextView 
     android:text="row four" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    </LinearLayout> 

</LinearLayout> 
+0

मेरा जवाब देखें और देखें कि यह मदद करता है या नहीं। यदि उत्तर पूरी तरह से प्रश्न का उत्तर देता है तो कृपया एक उत्तर चिह्नित करें। – trgraglia

उत्तर

10

आप एक LinearLayout में fill_parent उपयोग कर रहे हैं लेआउट संभव है और बाद में परिभाषित सभी लेआउट आइटम के रूप में के रूप में ज्यादा जगह लेने के अंतरिक्ष छोड़ दिया है से निपटने के लिए होगा।

यदि आप दोनों लाइनरलाइट्स की ऊंचाई को wrap_content पर सेट करते हैं तो वजन को दस्तावेज के रूप में काम करना चाहिए।

8

जेनुज़ ने जो कहा, उस पर बिल्डिंग, यदि आप fill_parent का उपयोग करते हैं, तो आप एंड्रॉइड सेट कर सकते हैं: लेआउट_वेट एकाधिक लेआउट आइटम्स के बीच "पूर्ण क्षेत्र" को "विभाजित" करने के लिए।

लेआउट_वेट क्षेत्र में वृद्धि नहीं करता है, यह क्षेत्र में "दाएं" को बढ़ाता है। लेकिन यह माता-पिता के सापेक्ष भी है। यदि आपके पास लेआउट_हेइट = fill_parent वाला पैरेंट है, तो लेआउट_वेट = 0 के साथ और माता-पिता के साथ एक भाई है, बच्चों में से एक को लेआउट_वेट = 1 सेट करना माता-पिता को प्रभावित नहीं करता है।

माता-पिता और भाई दोनों, उपलब्ध क्षेत्र का 50% हिस्सा ले सकते हैं जो वे भर सकते हैं।

+0

मुझे एक ही समस्या है। मैं एक क्षेत्र को विभाजित करने के लिए 'fill_parent' और' android: layout_weight' का उपयोग कर रहा हूं। हालांकि, जितना बड़ा मैं वजन कम करता हूं, उतना ही छोटा क्षेत्र मिलता है। मैं इसके साथ काम कर सकता हूं, लेकिन मैं इसके पीछे तर्क समझना चाहता हूं। स्वाभाविक रूप से भारी वजन का परिणाम एक बड़े क्षेत्र में होना चाहिए (जैसा कि यह 'wrap_conent' के साथ होता है) और दूसरी तरफ नहीं। – znq

+0

इसका कारण यह है कि लेआउट_वेट आमतौर पर layout_width या layout_height wrap_content पर सेट के साथ प्रयोग किया जाता है। इसे आज़माएं, आप देखेंगे कि यह उस लेआउट आकार को बढ़ाता है जिसके आधार पर उच्च वजन होता है। मैं आपके बिंदु को समझता हूं और सोचता हूं कि इसे दोनों उदाहरणों के लिए करना चाहिए क्योंकि यह भ्रमित है, लेकिन मुझे बस याद है। – marchinram

41

मुझे एक ही समस्या थी। यह चाल आपके द्वारा वजन निर्धारित करने वाले नियंत्रणों के लिए "wrap_content" या "fill_parent" का उपयोग नहीं करना है। इसके बजाय layout_height को 0px (जब लंबवत लेआउट के अंदर) सेट करें और उसके बाद बाल नियंत्रण वजन मानों के अनुपात में मिलेंगे।

+0

मैं इसे एक छवि दृश्य के साथ आज़मा रहा हूं और लिटर मुझे एक त्रुटि दे रहा है: "संदिग्ध आकार: यह दृश्य अदृश्य कर देगा, शायद लेआउट_विड्थ के लिए इच्छित"। लेआउट_हेइट को "1 डीपी" में बदलना हालांकि काम करता है। – phreakhead

+0

नीचे मेरा उत्तर देखें। यदि आप वजन और वजन योग का उपयोग करते हैं तो आपको चौड़ाई की आवश्यकता नहीं होनी चाहिए। – trgraglia

+0

यह बहुत अच्छा है !! बहुत बहुत धन्यवाद –

1

रेखीय लेआउट गुणों में "fill_parent""wrap_content" के बजाय करने के लिए लेआउट चौड़ाई बदलने आशा है कि यह मदद करता है।

9

मैं जानता हूँ कि यह देर हो चुकी है, लेकिन उम्मीद है कि यह लोगों को मदद मिलती:

माता पिता पर उपयोग android:weightSum। देव डॉक्स के लिए यहां एक लिंक है।

http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:weightSum

उपयोग 1.0 माता पिता पर की android:weightSum और उसके बाद क्रम में android:layout_weight के साथ बच्चे विचारों पर 0.x का उपयोग उन्हें अंतरिक्ष की कि अनुपात का उपयोग करने के लिए।

31

Suspicious size: this will make the view invisible, probably intended for layout ...

आप

त्रुटि के रूप में त्रुटि मिलती है माता-पिता में android:orientation पर सही पैरामीटर सेट करने के लिए याद

+3

धन्यवाद यूयूयूयू बहुत !! – Flawyte

+2

अभिविन्यास भाग महत्वपूर्ण है। धन्यवाद :) – Mudassir

+1

मुझे अंत में पता चला कि यह न केवल मौजूदा लाइनरलेआउट पर ध्यान दे रहा है, बल्कि बाहरी लेआउट की भी देखभाल करता है ... यदि आउटटर सेट ओरिएंटेशन वर्टिकल है, लेकिन आंतरिक लेआउट क्षैतिज के रूप में सही है, 0 डीपी या 0 पीएक्स के साथ चौड़ाई है विफलता भी, फिर से धन्यवाद ... – VincentBear

3

समाधान 0px करने के लिए जब आप का उपयोग layout_height स्थापित करने के लिए है layout_weight।

लेकिन आप इस स्पष्ट रूप से अजीब/उलटा व्यवहार क्यों देखते हैं?

संक्षेप में: शेष स्थान नकारात्मक है और इसलिए वजन 4 वाले बच्चे को अधिक नकारात्मक स्थान मिलता है और इसकी ऊंचाई अधिक कम हो जाती है।

विवरण:

मान लें कि आपके माता-पिता ऊर्ध्वाधर लेआउट की ऊंचाई 100 पिक्सल है। (2 * 100 - प्रत्येक बच्चे पर

लेआउट ऊंचाई fill_parent

सभी चाइल्ड की कुल ऊंचाई = 2 * 100 पिक्सल

शेष ऊंचाई = 100 (यानी प्रत्येक बच्चे भी 100 पिक्सल ऊंचाई है)) = -100 पिक्सेल (यह नकारात्मक)

अब, चलो बच्चे के बीच इस शेष ऊंचाई को वितरित करते हैं। पहला व्यक्ति सबसे बड़ा हिस्सा प्राप्त करेगा: 80% (यानी -100 * 4/(4 + 1))। दूसरे बच्चे के 20% प्राप्त (यानी -100 * 1/(4 + 1))

अब गणना जिसके परिणामस्वरूप ऊंचाई:

बच्चे 1: 100 + (-80) = 20px

बच्चे 2 : 100 + (-20) = 80 पीएक्स

यहां कुछ भी अजीब नहीं, केवल गणित। बस जागरूक रहें कि शेष जगह नकारात्मक हो सकती है! (या ऊंचाई को 0 पर स्पष्ट रूप से सेट करें)

1

यदि लाइनरलेआउट का अभिविन्यास लंबवत है, तो layout_height को 0dp के रूप में सेट करें। क्षैतिज लेआउट के मामले में layout_width 0dp के रूप में सेट करें।

यदि हम उपर्युक्त नियमों का पालन नहीं करते हैं, तो दृश्य निर्दिष्ट विशेषताओं के अनुसार स्थान लेता है और इसलिए संरेखण अपेक्षा के अनुसार नहीं है।

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