2011-03-23 13 views
20

समूह लेआउट में मार्जिन काम नहीं कर रहे हैं।रैखिकलायआउट, सापेक्ष लयआउट, आदि मार्जिन अपेक्षित काम नहीं करते हैं

उदाहरण के लिए

,

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_margin="40dip" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="I'm a button" /> 

</LinearLayout> 

सभी पक्षों पर 40p मार्जिन के साथ एक बटन प्रदर्शित करना चाहिए। हालांकि, यह दाएं और नीचे 80p मार्जिन है।

क्या मैं कुछ गलत कर रहा हूं? क्या यह एक बग है?

गुरुत्वाकर्षण का उपयोग करने के लिए एक कामकाज होगा, लेकिन यह केवल मार्जिन के साथ भी काम करता है।

बीटीडब्ल्यू, एक समान प्रश्न posted here है लेकिन इसका उत्तर नहीं दिया गया है।

+0

बटन केंद्र स्थापित करने की कोशिश के साथ रैप क्षैतिज – Nepster

उत्तर

20

android:padding="40dp" लाइनरलायआउट पर या android:layout_margin="40dp" बटन पर आपको वह प्रभाव देगा जो आपको चाहिए। पैडिंग दृश्य किनारों और इसकी सामग्री के बीच की जगह को परिभाषित करता है, लेआउट मार्जिन दृश्य के किनारे अतिरिक्त स्थान को परिभाषित करता है।

+1

मार्जिन चाहिए मार्जिन '' 40dp' द्वारा सभी पक्षों से LinearLayout'। यह अजीब है कि यह उम्मीद के रूप में काम नहीं कर रहा है। –

11

समस्या वास्तव में FrameLayout मार्जिन का अर्थ है। setContentView() आपके "मुख्य" लेआउट को FrameLayout पर जोड़ता है, जो दृश्य पदानुक्रम की वास्तविक जड़ है (आप इसे पदानुक्रम दर्शक के साथ देख सकते हैं) और आपको फोन द्वारा पेश किया जाता है।

मार्जिन पैरेंट लेआउट द्वारा प्रबंधित किया जाता है, इसलिए इस मामले में मुख्य FrameLayout। मुझे नहीं पता कि यह एक सुविधा या बग है, लेकिन इस तरह यह लेआउट मार्जिन का अर्थ है।

तो ठीक है, जब मैं टाइप कर रहा था तो समाधान पहले से ही पोस्ट किया गया था: इसके बजाय पैडिंग का उपयोग करें।

+0

मुझे कुछ बग फिक्सिंग याद आती है जिस तरह फ्रेमलेआउट हनीकॉम टाइमफ्रेम के दौरान मार्जिन को संभालता है और इसमें डिफ़ॉल्ट गुरुत्वाकर्षण सेटिंग शामिल होती है। यह वास्तव में एक बग हो सकता है। :) – adamp

+0

दूसरा तरीका एंड्रॉइड सेट है: layout_gravity = "top | left" फ़्रेमलेआउट के अंदर देखें। – VinceStyling

5

यदि आप एक लेआउट के लिए मार्जिन सेट की जरूरत है, बस इसे एक और रेखीय या रिश्तेदार लेआउट

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

    <LinearLayout android:layout_margin="40dip" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button android:id="@+id/button" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="I'm a button" /> 

    </LinearLayout> 

</LinearLayout> 
+2

यह बेहतर जवाब है। पैडिंग जरूरी नहीं है कि आप क्या चाहते हैं, खासकर यदि आपके लेआउट में एक दृश्य पृष्ठभूमि है। –

+0

आपको आंतरिक को मार्जिन देने के उद्देश्य से घोंसले के लेआउट से बचना चाहिए। http://developer.android.com/training/improving-layouts/optimizing-layout.html। यह किसी भी तरह से बेहतर जवाब नहीं है। –

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