2009-12-24 17 views
6

मुझे यकीन है कि मैं कुछ सरल याद आ रही हूँ ...एंड्रॉयड: सरल LinearLayout और fill_parent सवाल

पृष्ठभूमि:

मैं एंड्रॉयड और यूआई डिजाइन करने के लिए नया हूँ, और मैं बस के चारों ओर खेलना चाहते थे लेआउट के साथ। अभी मैं टेक्स्ट लेबल के शीर्ष पर एक चेकबॉक्स ढेर करना चाहता हूं। मैं निम्नलिखित XML लेआउट जो काम करता है ठीक उपयोग कर रहा हूँ:

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

    <CheckBox android:id="@+id/check_box" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/check_box_text" /> 

    <TextView android:id="@+id/dummy_display" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/dummy_label" /> 

</LinearLayout> 

मेरे टेस्ट (बस कैसे चीजें काम करता है का एहसास दिलाने के लिए):

  • परिदृश्य 1) ​​जब मैं सेट CheckBox का layout_height से "fill_parent", CheckBox पूरी स्क्रीन लेता है और गठबंधन केंद्र (यानी - TextView गायब हो जाता है)।

  • परिदृश्य 2) अगर मैं बजाय सेट TextView के layout_height"fill_parent" को, CheckBoxनहीं गायब है। वास्तव में, कुछ भी गायब नहीं होता है, और लेआउट उपरोक्त xml जैसा दिखता है जहां सबकुछ ऊपर-बाईं ओर धक्का दिया जाता है।

प्रश्न (और टिप्पणियों):

कैसे आ परिदृश्य 1 जिस तरह से यह काम करता है काम करता है?

यह व्यवहार मेरे लिए असंगत लगता है। मैंने सोचा कि fill_parent केवल तत्व को पेटेंट में जो भी स्थान उपलब्ध है उसे भरने देना है। मेरे लिए तो, ऐसा लगता है कि TextView मिलना चाहिए जो कुछ भी अंतरिक्ष यह जरूरत (क्योंकि यह wrap_content है), लेकिन CheckBox अंतरिक्ष के बाकी ऊपर ले जाना चाहिए (ताकि TextView स्क्रीन के नीचे करने के लिए मजबूर किया जाएगा, लेकिन अदृश्य नहीं है)। दूसरे शब्दों में ... परिदृश्य 2 मुझे समझ में आता है, लेकिन परिदृश्य 1 नहीं करता है।

कृपया समझाएं :-)।

धन्यवाद,

टॉम

+0

आप इसे पढ़ना चाहेंगे (यदि पहले से नहीं है): एंड्रॉइड कैसे दृश्य खींचता है? लिंक: http://developer.android.com/guide/topics/ui/how-android-draws.html – Samuh

उत्तर

13

LinearLayout उपायों एक भी कदम के रूप में बच्चों को एक के बाद एक, तो आपका पहला उदाहरण में यह देखता है कि पहले बच्चे सभी उपलब्ध ऊंचाई यह यह करने के लिए यह देता है करना चाहते हैं। आपके दूसरे उदाहरण में यह सभी उपलब्ध स्थान दूसरे बच्चे को देता है। आप चेकबॉक्स पाठ बॉक्स के लिए आवश्यक जगह को छोड़कर सभी जगह लेने के लिए चाहते हैं तो आप wrap_parent करने के लिए चेकबॉक्स का layout_height बदल सकते हैं और प्रत्येक बच्चे के layout_weight संपत्ति स्थापित करना चाहिए, लेआउट भार इंगित करता है कि कैसे उपलब्ध जगह के बहुत के बाद सभी बच्चों को होना चाहिए नापा गया उनमें से प्रत्येक को जोड़ें।
1) LinearLayout के जनक रेखीय लेआउट यह कितना बड़ा हो सकता है
2) LinearLayout सब यह बच्चों के क्रम में वे अपने लेआउट पैरामीटर के बारे में निर्दिष्ट पूछता है और उपलब्ध स्थान वितरित करता है बताता है: अधिक विशिष्ट जिस तरह से यह कदम से काम करता है होना करने के लिए।
3) अगर किसी भी रिक्त स्थान अभी भी उपलब्ध यह अपने वजन के (लेआउट वजन के अनुसार बच्चों के बीच वितरित करता है और 1, 0 के बीच 0 - डिफ़ॉल्ट रूप से)
आशा है कि यह मदद करता है
संपादित करें:
मैंने LinearLayout स्रोत कोड की जांच की और पता चला कि क्या रैखिक लेआउट में FILL_PARENT लेआउट पैराम हैं और शून्य वजन मापने वाला कोड लेआउट ऊंचाई WRAP_CONTENT पर सेट नहीं करेगा और बाद में वजन के अनुसार सभी बच्चों के बीच स्थान वितरित करेगा।

+0

हम्म, यह पूरी तरह से सही प्रतीत नहीं होता है, लेकिन आप करीब लगते हैं। जब मैं चेकबॉक्स का वजन 1 तक सेट करता हूं ... लेकिन इसे ऊंचाई के लिए fill_parent के रूप में रखें ... यह अपेक्षा के अनुसार काम करता है। मतलब ... रेंडरर ऊंचाई के लिए fill_parent को देखने के बाद बस सभी जगहों को चेकबॉक्स नहीं देता है। तो वजन के बारे में आप जो कुछ भी कहते हैं, वह मुझे समझ में आता है ... लेकिन मुझे नहीं लगता कि यह कब/कहाँ "fill_parent" इस लेआउट एल्गोरिदम में फिट बैठता है। क्या आप? – Tom

+0

अधिक जानकारी के लिए मेरे संपादन देखें। यही कारण है कि मुझे एसओ पसंद है यह हमेशा कुछ सीखने का मौका :) –

+0

यदि मैं आपको एक से अधिक वोट दे सकता हूं, तो मैं चाहता हूं। यह मुझे एनयूटीएस को यह पता लगाने की कोशिश कर रहा था कि सभी उपलब्ध स्थान को कैसे पूरा किया जाए, और अधिक जगह एक से दूसरे स्थान पर जा रही है। मैं रिश्तेदार लेआउट का एक छिपकली का उपयोग कर रहा था और बहुत दूर नहीं जा रहा था। – I82Much

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