2011-12-27 27 views
31
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/messageLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/messageSender" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="10dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginTop="5dp" 
     android:layout_marginBottom="5dp"/> 

    <TextView 
     android:id="@+id/messageSenderName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/messageSender" 
     android:ellipsize="end" 
     android:maxLines="1" 
     android:singleLine="false" 
     android:textColor="@color/list_text_color" 
     android:textSize="16dp" 
     android:layout_marginTop="5dp" /> 

    <TextView 
     android:id="@+id/messageContent" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/messageSender" 
     android:layout_below="@id/messageSenderName" 
     android:ellipsize="end" 
     android:maxLines="1" 
     android:singleLine="false" 
     android:textColor="@color/codeFont" 
     android:textSize="13dp"/> 
</RelativeLayout> 

मेरे लेआउट में मुझे समस्या है। जब मैं marginTop="5dp" सेट करता हूं तो यह ठीक है, लेकिन जब मैं marginBottom का उपयोग करता हूं तो मेरे लेआउट में कुछ भी नहीं होता है। इसके अलावा जब मैं RelativeLayout में पैडिंग सेट करता हूं तो यह भी काम नहीं करता है। यहां क्या समस्या है? क्या आप मुझे कोई समाधान दे सकते हैं?क्यों मार्जिनबॉटम काम नहीं कर रहा है?

उत्तर

83

marginBottom अगर आप <RelativeLayout> के लिए android:layout_height="wrap_content" निर्धारित करते हैं, बजाय match_parent और जाँच के रूप में सेट कोई प्रभाव नहीं है।

+0

'fill_parent' को एपीआई लेवल 8 में शुरू किया गया है और 'match_parent' द्वारा प्रतिस्थापित किया गया है। –

+3

@RosePerrone हाँ मुझे पता है, लेकिन मुझे लगता है कि यह उत्तर 2 साल पहले पोस्ट किया गया है;) –

+0

बस अपना उत्तर अपडेट करें –

17

यह वास्तव में <RelativeLayout> का एक बग है, इसलिए आप <LinearLayout> के अंदर रिलेवेटलाइट को लपेटने और वहां मार्जिन सेट करने का प्रयास कर सकते हैं।

+1

यदि यह सकारात्मक है तो केवल रैखिक के लिए रिश्तेदार को बदलें। – Campino

9

शायद आप उसी प्रभाव को प्राप्त करने के लिए <RelativeLayout> के android:paddingBottom="" सेट कर सकते हैं।

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। – Naveen

+0

@Naveen मुझे नहीं पता :) –

+1

यह अन्यथा समझ में नहीं आता है कि यह एक स्वीकार्य काम है। – Moritz

13

मुझे यकीन नहीं है कि एंड्रॉइड के संशोधन में आप इस मुद्दे का सामना कर रहे हैं। मैंने एंड्रॉइड 4.2.2 (https://android.googlesource.com/platform/frameworks/base/+/android-4.2.2_r1.1/core/java/android/widget/RelativeLayout.java) में रिलेवेटिवआउट देखा और मुझे विश्वास है कि ऑनमेजर में एक बग है।

486 488 के लिए लाइनों में, हम कोड निम्नलिखित है:

if (isWrapContentHeight) { 
    height = Math.max(height, params.mBottom); 
} 

मेरी राय में, इसके बाद के संस्करण पढ़ना चाहिए:

if (isWrapContentHeight) { 
    height = Math.max(height, params.mBottom + params.bottomMargin); 
} 
Android के साथ

: layout_height = "wrap_content", RelativeLayout नहीं है अंतिम लंबवत रखे गए दृश्य के नीचे मार्जिन को ध्यान में रखें।

मैं सुझाव है कि आप निम्न में से एक का प्रयास करें:

*) एक डमी का मानना ​​है कि आखिरी खड़ी बाहर रखी दृश्य होगा जोड़ें, और सुनिश्चित करें कि यह एंड्रॉयड है: layout_below विशेषता। ध्यान दें कि डमी दृश्य में नीचे मार्जिन नहीं है, यह वहां है ताकि सापेक्ष लयआउट इसके ऊपर रखे गए विचारों के निचले मार्जिन को समझ सके। आपके मामले के लिए, डमी दृश्य इस प्रकार दिखाई देगा:

<View 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_below="@id/messageSender" 
/> 

*) दूसरों के रूप में उल्लेख किया है, इस तरह के पैडिंग के रूप में अन्य तरीकों से एक ही प्रभाव को प्राप्त।

*) रिलेटिवलाउट, इसकी प्लेटफार्म शैली परिभाषाओं और पूल प्रबंधन कक्षाओं में आपके प्रोजेक्ट में एक गैर-तुच्छ समाधान लाया गया है, मैंने ऊपर वर्णित बग फिक्स का प्रदर्शन किया है और कहीं भी इसका उपयोग आमतौर पर रिलेवेटिवआउट का उपयोग करेगा।

*) Google

के साथ एक बग फ़ाइल करें उम्मीद है कि इससे मदद मिलती है।

+0

यह 'रिलेवेटिवआउट' के नवीनतम संस्करणों में तय किया गया है, लेकिन अब यह आपके द्वारा उपयोग किए जा रहे लक्ष्य एसडीके संस्करण पर निर्भर करता है। 'एंड्रॉइड 5.1.1' में, यह इस तरह के संस्करण की जांच करके किया जाता है: 'अगर (targetSdkVersion

-3

यदि आप android:layout_marginBottom with android:layout_alignParentBottom="true" का उपयोग करते हैं तो यह काम करता है।

उदाहरण के लिए:

android:layout_alignParentBottom="true" 
android:layout_marginBottom="50dp"> 
+0

नहीं, यह नहीं, समस्या layout_height = "wrap_content" है – Miquel

1

सुनिश्चित करें कि आपके जड़ कंटेनर के layout_heightmatch_parent बजाय wrap_content पर सेट है।

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