RelativeLayout wra_content के लिए फुलस्क्रीन ले रहा है


126

जब कोई तत्व layout_height="fill_parent"दूसरे शब्दों में नहीं होते हैं , तो फ़ोबारज़ को नीचे से सभी तरह से बाहर निकाल दिया जाता है , सभी तत्व ऊँचाई पर लपेटते हैं। यहाँ छवि विवरण दर्ज करें

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/feed_u"
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:layout_marginLeft="5dip"
        android:scaleType="centerCrop"
        android:drawableTop="@android:drawable/presence_online"
        android:text="U" />
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/feed_u">
        <ImageView
            android:id="@+id/feed_h"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/btn_minus" />
        <ImageView
            android:id="@+id/feed_ha"
            android:layout_toLeftOf="@id/feed_h"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/btn_plus" />
        <TextView
            android:id="@+id/feed_t"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Title">
        </TextView>
        <TextView
            android:id="@+id/feed_a"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Band"
            android:layout_below="@id/feed_t">
        </TextView>
        <TextView
            android:id="@+id/feed_s"
            android:layout_below="@id/feed_a"
            android:text="S"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content">
        </TextView>
        <TextView
            android:id="@+id/feed_tm"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:text="FOOBARZ"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content">
        </TextView>

    </RelativeLayout>
</RelativeLayout>

1
hierarchyviewerग्रहण में पदानुक्रम देखें परिप्रेक्ष्य का उपयोग करें यह निर्धारित करने के लिए कि चीजें कहाँ गलत हो रही हैं: डेवलपर
।android.com

ग्रहण के अंदर पदानुक्रम दृश्य परिप्रेक्ष्य कहां है? कौन सी स्क्रीन?
20

1
विंडो> ओपन पर्सपेक्टिव> अन्य ... - हालांकि मुझे लगता है कि आपके पास पहले से ही आपका उत्तर है, @alextc के सौजन्य से।
कॉमन्सवेअर

@CommonsWare मैंने इसे पाया है, लेकिन इसकी रिक्तता है, मैं वास्तव में इसमें एक लेआउट कैसे लोड कर सकता हूं ??
२०:२

जवाबों:


266

से RelativeLayoutदस्तावेज़:

कक्षा अवलोकन

एक लेआउट जहां बच्चों की स्थिति को एक-दूसरे या माता-पिता के संबंध में वर्णित किया जा सकता है।

ध्यान दें कि आपके पास RelativeLayout के आकार और उसके बच्चों की स्थिति के बीच एक परिपत्र निर्भरता नहीं हो सकती है। उदाहरण के लिए, आप एक RelativeLayout नहीं कर सकते हैं जिसकी ऊँचाई WRAP_CONTENT पर सेट है और एक बच्चा ALIGN_PARENT_BOTTOM पर सेट है

कक्षा प्रलेखन

जो बिलकुल आपका मामला है। RelativeLayout ऐसा नहीं कर सकता।


3
इसलिए मैंने align_parentBottom हटा दिया और लेआउट अब केवल 1/10 स्क्रीन है जैसा कि यह होना चाहिए, मैं इसके नीचे FOOBARZ कैसे लगा सकता हूं?
शिकारी

2
बस एक छोटा रूप लेने के द्वारा मैं कहूंगा: FOOBARZ टेक्स्टव्यू लें, इसे बाहरी RelativeLayout में ले जाएं और Android सेट करें: layout_below = "@ id / feed_u"। Im बिल्कुल यकीन नहीं है अगर यह वही है जो आप कठिन चाहते हैं।

क्या आपने रिश्तेदार लेआउट को एक निश्चित ऊँचाई प्रदान करने की कोशिश की है (जैसे android:layout_height="200dp"। यह आपको उपयोग करने की अनुमति देगाandroid:layout_alignParentBottom="true"
gfrigon

1
ध्यान दें कि यह एक पृष्ठभूमि के रूप में बड़े ड्रॉबल का उपयोग करते समय भी हो सकता है। इसके चारों ओर जाने के लिए, मुख्य सामग्री को बाल लेआउट में खींचें, और पृष्ठभूमि <ImageView>को इसके पीछे एक सहोदर बनाएं ।
बेन लेगियरियो

1
मैंने देखा है कि बच्चों को भी एक का उपयोग करने की अनुमति नहीं layout_heightकीmatch_parent
डैनियल एफ

52

इसके समाधान की तलाश करने वालों के लिए, जैसे मैंने किया, आप FrameLayoutइसके बजाय उपयोग कर सकते हैं RelativeLayout

फिर आप नीचे दिए गए उद्देश्य के लिए गुरुत्वाकर्षण वस्तु को नीचे की ओर सेट कर सकते हैं

<TextView
    android:layout_gravity="bottom|right"
    android:text="FOOBARZ"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
</TextView>

फ्रेमलैट का उपयोग करें महान समाधान है। यदि आपके पास इस लेआउट में अधिक घटक हैं, तो आपको ओवरलैप से बचने के लिए मार्जिन सेट करना होगा।
वेरोनी

23

आपने RelativeLayout को "wrap_content" और TextView को सेट कर दिया है android:layout_alignParentBottom="true", इसलिए यह स्वचालित रूप से RelativeLayout को नीचे तक खींचने का प्रयास करता है। सापेक्ष लेआउट के साथ ऐसी निर्भरता का उपयोग न करें, क्योंकि यह "परिपत्र निर्भरता" के रूप में गिना जा सकता है।

RelativeLayout के लिए डॉक्स से :

ध्यान दें कि आपके पास RelativeLayout के आकार और उसके बच्चों की स्थिति के बीच एक परिपत्र निर्भरता नहीं हो सकती है। उदाहरण के लिए, आपके पास कोई RelativeLayout नहीं हो सकता है जिसकी ऊंचाई निर्धारित की गई हो WRAP_CONTENTऔर एक बच्चा सेट हो ALIGN_PARENT_BOTTOM

पैरेंट रिलेटिवआउट के अलावा किसी अन्य चीज़ के लिए अपने टेक्स्ट दृश्य को संरेखित करने का प्रयास करें, लेकिन इस समस्या को भी देखें:
परिपत्र निर्भरता, सटीक कोड के साथ कुछ मदद की आवश्यकता

वैकल्पिक रूप से, अधिक परिष्कृत आंतरिक लेआउट जोड़ने का प्रयास करें।


2
वैसे, मुझे लगता है कि रनटाइम पर - आपका कोड "एंड्रॉइड: Layout_alignParentBottom =" true "" के साथ भी आप चाहते हैं। ऐसा लगता है, कि एंड्रॉइड रनटाइम पर इस मामले में कुछ अतिरिक्त पार्सिंग करता है और इसे सही ढंग से प्रदर्शित करता है। आपको अपना ऐप चलाने की कोशिश करनी चाहिए।
दारूल

0

अच्छा जवाब। अब अगर आपके पास नहीं है layout_alignParentBottom="true"और अभी भी इस मुद्दे को देख रहे हैं android:background="@drawable/bkgnd"कि bkgnd एक बड़ी बात कहां है।


0

मुझे यकीन नहीं है कि इसे पूरा करने का स्वच्छ और स्पष्ट तरीका अभी तक पोस्ट नहीं किया गया है। यह परफ़ॉर्मेंट सॉल्यूशन किसी ज्ञात दृश्य के साथ किसी भी दृश्य MyView के लिए काम करता है।

अपने फ्रेम में RelativeLayoutऊंचाई के साथ लपेटें wrap_content:

<!-- width here should constrain RelativeLayout -->
<FrameLayout 
     android:layout_width="@dimen/my_layout_width"
     android:layout_height="wrap_content">

     <RelativeLayout  
          android:layout_width="match_parent"
          android:layout_height="wrap_content" />

     <MyView
        ...
        android:layout_gravity="bottom" />
</FrameLayout>

बस ध्यान दें कि फ्रेमलैट के नीचे का दृश्य आपकी RelativeLayoutसामग्री के शीर्ष पर होगा , इसलिए आपको इसे व्यवस्थित करने के लिए उस लेआउट के निचले भाग में पैडिंग जोड़ने की आवश्यकता होगी। यदि आप चाहते हैं कि दृश्य परिवर्तनशील ऊँचाई पर हो, तो आप मापी गई दृश्य ऊँचाई के आधार पर कोड में पैडिंग जोड़ने के लिए सबक्लास फ़्रेमलैटआउट या तो कर सकते हैं, या फ़्रेमलाइन को लंबवत रेखीय लयआउट में बदल सकते हैं यदि आप प्रदर्शन के बारे में चिंतित नहीं हैं, तो यह एक सूची नहीं है। आइटम, या विचार अपेक्षाकृत हल्के हैं।


0

बच्चे के विचारों के साथ alight_Parent प्रकार के गुणों का उपयोग न करें

आप संबंधित गुरुत्व के साथ RelativeLayout के बजाय फ़्रेम लेआउट का उपयोग कर सकते हैं

    <FrameLayout
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
     <TextView
        android:layout_gravity="bottom|right"
        android:text="Hello "
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">

    </TextView>

</FrameLayout>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.