2010-09-17 12 views
16

मैं वास्तव में करने की कोशिश की, लेकिन मैं नहीं समझ सकता कैसे एंड्रॉयड layout_weight सेटिंग की व्याख्या ...समस्याएं समझने एंड्रॉयड एक्सएमएल layout_weight

क्या मैं प्राप्त करने के लिए कोशिश कर रहा हूँ

  • साथ शीर्ष पर एक शीर्षक है एक निश्चित ऊंचाई
  • एक EditText और एक बटन से युक्त नीचे इनपुट क्षेत्र
  • बीच में एक सामग्री बात यह है कि सभी ले रहा है क्या अंतरिक्ष के बचा है

टाइप करते समय मैं एडिटटेक्स्ट को एक विशिष्ट ऊंचाई पर बढ़ाना चाहता हूं और स्क्रॉलिंग शुरू करना चाहता हूं यदि पाठ दर्ज की गई ऊंचाई से अधिक हो। ऐसा करने के लिए मुझे संपादन टेक्स्ट के साथ एक साथ बढ़ने के लिए आसपास के LinearLayout की आवश्यकता है।

यदि मैं आंतरिक LinearLayout के लिए एक विशिष्ट ऊंचाई को परिभाषित करता हूं तो यह नहीं बढ़ेगा। यदि मैं नहीं करता, आंतरिक लेआउट स्क्रॉलव्यू के बजाए सभी जगह लेता है, इससे कोई फर्क नहीं पड़ता कि मैं layout_weight का उपयोग करने का प्रयास करता हूं। :(

मेरे वर्तमान एक्सएमएल कि तरह लग रहा है:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="I'm a header" /> 
    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="bottom"> 
     <LinearLayout 
      android:id="@+id/itemContainer" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
    </ScrollView> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:padding="2dp" 
     android:gravity="bottom" 
     android:isScrollContainer="true" 
     android:background="@drawable/steel" > 
     <EditText 
      android:id="@+id/edittext01" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.2" 
      android:scrollbars="vertical" 
      android:fadingEdge="vertical" 
      android:fadingEdgeLength="60dp" 
      android:maxHeight="40dp" 
      android:textSize="15sp" /> 
     <Button 
      android:id="@+id/button" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.8" 
      android:layout_gravity="right" 
      android:text="Send" 
      android:textStyle="bold" 
      android:textSize="15sp" /> 
    </LinearLayout> 
</LinearLayout> 

कोई युक्ति बहुत सराहना कर रहे हैं

उत्तर

37

layout_weight का उपयोग यह निर्धारित करने के लिए किया जाता है कि एंड्रॉइड विभिन्न जगहों को प्राप्त करने के बाद अंतरिक्ष में किसी भी बाएं स्थान को कैसे विभाजित करता है।

तो कहें कि आपके पास पंक्ति में 3 विजेट हैं, जिनमें से प्रत्येक 10 पिक्सल चाहते हैं, लेकिन आपके पास 50 पिक्सल की जगह है। यहाँ layout_weights के कुछ उदाहरण और पिक्सेल की संख्या प्रत्येक विजेट का दावा करेंगे कर रहे हैं:

widget1: weight = 1, 30px 
widget2: weight = 0, 10px 
widget3: weight = 0, 10px 

widget1: weight = 1, 20px 
widget2: weight = 1, 20px 
widget3: weight = 0, 10px 

widget1: weight = 1, 16.5px 
widget2: weight = 1, 16.5px 
widget3: weight = 1, 16.5px 

आप उपलब्ध स्थान के प्रतिशत के रूप वजन के बारे में सोच सकते हैं। यह सभी मूल्यों को जोड़ देगा, और फिर उचित रूप से भाग दें। इस प्रकार, अगर यह आपकी मदद करता है वजन कि जोड़ 100 का उपयोग कर सकते प्रतिशत करने के लिए:

widget1: weight = 0, 10px 
widget2: weight = 25, 15px 
widget3: weight = 75, 25px 

अगर मैं सही ढंग से समझ, आप नीचे विजेट एक विशेष आकार में शुरू करना चाहते हैं, तो कुछ अधिकतम आकार तक का विस्तार यदि आवश्यक हो तो , और फिर स्क्रॉल करें।

और, आप ऊपर दिए गए विजेट को अतिरिक्त स्थान ले जाने के लिए चाहते हैं।

दुर्भाग्यवश एंड्रॉइड में अधिकतम आकार निर्दिष्ट करना संभव नहीं है। मुझे लगता है कि आप सबसे अच्छा कर सकते हैं स्क्रॉलव्यू कुछ निश्चित आकार को लेआउट_वेट = 1 के साथ देना होगा और नीचे रैखिक लयआउट को wrap_content पर बताएं। यह (मुझे लगता है) LinearLayout का विस्तार तब तक कर सकता है जब तक यह अब और नहीं हो सकता है, क्योंकि स्क्रॉलव्यू ने पहले से ही अंतरिक्ष का दावा किया है।

हालांकि, चालान स्क्रॉलव्यू के लिए एक निश्चित आकार निर्दिष्ट कर रहा है जो सभी अलग-अलग स्क्रीन आकारों और संकल्पों पर समझ में आता है। आप विभिन्न संकल्पों के लिए अलग-अलग लेआउट बनाने के लिए समाप्त हो सकते हैं, जो शायद इसके लायक नहीं है। निजी तौर पर, मैं सिर्फ संपादन टेक्स्ट को एक निश्चित आकार देता हूं ...

+0

धन्यवाद माया। यही वही है जो मैं करने की कोशिश करता हूं। शायद kcoppock एक और विचार है। यदि यह होना चाहिए तो मैं विभिन्न समाधानों के लिए लेआउट तैयार कर दूंगा। :(स्क्रॉलव्यू को एक विशिष्ट आकार में सेट करना और लेआउट_वेट = 1 जोड़ना स्क्रॉलव्यू को प्राप्त करने वाली सभी जगहों को ले सकता है और जैसे ही कुछ अन्य विजेट अधिक स्थान लेता है, ठीक है? – stpn108

+2

यूप, विचार। –

+1

सही लगता है।मेरा मानना ​​है कि एडिटटेक्स के लिए एक सेटमल्टीलाइन विशेषता है। यदि आप इसे सेट करते हैं, और ऊंचाई को wrap_content पर सेट करते हैं, तो मुझे पूरा यकीन है कि यह फिट करने के लिए विस्तारित होगा, और तदनुसार स्क्रॉलव्यू को छोटा कर देगा। – kcoppock

1

मेरा मानना ​​है कि आप से बेहतर होगा एक RelativeLayout के साथ अपने शीर्ष लेख जोड़ें, और layout_alignParentTop="true" के लिए सेट!। । फिर, अपने EditText और बटन जोड़ने layout_alignParentBottom="true" को उस क्षेत्र की स्थापना की। इसके बाद केंद्र क्षेत्र जोड़ने चौड़ाई और fill_parent को ऊंचाई निर्धारित करते हैं, और layout_above="{the id of the EditText/Button layout}", और layout_below="{the id of the header layout}" निर्धारित किया है।

मेरे पास काम पर ग्रहण नहीं है, अन्यथा मैं आपके लिए इसका परीक्षण करूंगा, लेकिन यह काम करना चाहिए।

+0

धन्यवाद बहुत, kcoppock! मैं परीक्षण करूंगा कि एक या दो घंटे के भीतर और आपको बताएगा कि यह काम करता है या नहीं। – stpn108

+0

एचएम, यह वास्तव में कुछ भी नहीं बदला था। केवल हेडर गायब हो गया। ;) यदि मैं फिर से LinearLayout का उपयोग करता हूं तो हेडर वापस आता है। जैसा कि आपने सुझाव दिया था, मैंने 'layout_alignParentTop = "true" और' layout_alignParentBottom = "true" रखा था। जैसे ही मैंने आंतरिक 'LinearLayout' को 'layout_height = "wrap_content" पर सेट किया है, यह आधा स्क्रीन भरता है। इसके अतिरिक्त, मुझे समझ में नहीं आ रहा है कि क्यों EditText LinearLayout के भीतर चौड़ाई का 80% लेता है क्योंकि इसे 'layout_weight = "0.2"' के रूप में परिभाषित किया गया है। लेकिन यह सवाल यहां नहीं है ...;) – stpn108

+0

क्या आप पेस्टबिन.com लिंक पर जो भी कोशिश कर चुके हैं उसे पोस्ट कर सकते हैं? या बस इसे मूल पोस्ट में संपादित करें? मैं इसे देख सकता हूं और देख सकता हूं कि कुछ भी बाहर निकलता है या नहीं। ओह, भी, लेआउट वजन केवल पूर्णांक होना चाहिए जो मुझे विश्वास है। अगर मैं सही ढंग से याद करता हूं, तो परिभाषित सभी लेआउट_वेइट्स को 10 तक जोड़ना चाहिए। इसलिए 2 का वजन 20% है। हालांकि मैं उस पर गलत हो सकता था। – kcoppock

3

मुझे एक समान समस्या है (स्क्रीन के निचले भाग में चिपकने वाला रीफ्रेश टाइमस्टैम्प वाला एक पाद लेख और एक सूची दृश्य/स्क्रॉलव्यू सभी अवशेषों को ले रहा है अंतरिक्ष) और कई प्रयासों के बाद भी यह मेरे लिए काम किया निम्नलिखित लेआउट का उपयोग कर:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_above="@+id/refresh_date_text" 
       android:layout_alignParentTop="true" 
       android:orientation="vertical" 
       > 

    <ListView android:id="@android:id/list" android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:background="#FFFFFF" 
     android:layout_weight="1" android:divider="@drawable/list_divider" 
     android:dividerHeight="1dp" android:drawSelectorOnTop="false" /> 

    <TextView android:id="@android:id/empty" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="#ffffff" 
       android:gravity="center_horizontal" 
       android:paddingTop="10dp" 
       android:text="The list is empty."/> 

</LinearLayout> 

<TextView android:id="@+id/refresh_date_text" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:gravity="center_horizontal" 
      android:background="#f0f0f0" 
      android:textStyle="italic" 
      android:textSize="12dp" 
      /> 
</RelativeLayout> 

नहीं ListView जब एक स्क्रोलर साथ, सही संरेखण सभी झुकाव में, ठीक से दिखाई कतरन "सूची रिक्त है" पाठ।

-1
<LinearLayout 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:weightSum="1" 
> 
<TextView 
android:text=" TextView " 
android:textColor="#ffffff" 
android:textSize="15sp" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="#ff0000" 
/> 
<EditText 
    android:text=" EditText " 
    android:textSize="15sp" 
    android:layout_width="250dp" 
    android:layout_weight="1" 
    android:layout_height="0dp" 
    /> 
<Button 
    android:text=" button " 
    android:textColor="#000000" 
    android:textSize="15sp" 
    android:gravity="center_vertical|center_horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 
    </LinearLayout> 

यह मदद मिलेगी

+0

कोई अपराध नहीं, शायद मैं इस एक्सएमएल के साथ क्या करने की कोशिश कर रहा हूं, लेकिन मैं नहीं देख सकता कि इसे प्रारंभिक समस्या से कैसे मदद करनी चाहिए। क्या आप थोड़ा सा साफ़ कर सकते हैं? – stpn108

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