2011-12-08 21 views
5

मुझे एक रिलेवेटिवआउट मिला जिस पर मेरे पास शीर्ष पर नियंत्रण है। रनटाइम पर मैं एक नक्शा व्यू दिखाना चाहता हूं जो कि लेआउट में जोड़ा गया है, इसके तहत अन्य सभी दृश्य छुपाएं, लेकिन शीर्ष पर नियंत्रण नहीं। बाद में MapView फिर से छिपा हुआ है।view.bringToFront() काम क्यों करता है?

layout_main.bringChildToFront(layout_main.findViewWithTag("paramsUI")); 
layout_main.invalidate(); 

findViewByTag बात है, काम करने के लिए लगता है मैं देख लिया है कि डीबग मोड में। मैं भी करने की कोशिश की:

layout_main.findViewWithTag("paramsUI").bringToFront(); 

वहाँ मैं कुछ और मैं क्या करना है?

संपादित करें: क्षमा करें, समस्या यह है कि MapView नियंत्रण बार को छुपाता है, जो LetToFront() कॉल के कारण सभी दृश्यों के शीर्ष पर होना चाहिए।

+0

समस्या क्या है? कि 'MapView' dissappear नहीं है? या यह कि नियंत्रण 'MapView' के शीर्ष पर नहीं हैं? – kaspermoerch

उत्तर

0

आप अपने रिलेवेटिवआउट को लाइनरलायआउट में लपेट सकते हैं और नियंत्रण को लाइनरलाउट में भी डाल सकते हैं। इस तरह आप रिलेवेटिवआउट पर जो कुछ भी करते हैं, नियंत्रण ठीक होगा।

+0

यह मैला लगता है, लेकिन यह एकमात्र समाधान है जिसे मैंने अभी तक पूरी तरह से काम करने के साथ नहीं किया है। –

0

आप RelativeLayout के बजाय FrameLayout का उपयोग करने पर विचार करना चाहेंगे। RelativeLayout आंशिक विचारों के लिए अधिक है, जबकि FrameLayout पूर्णस्क्रीन अनुप्रयोगों के लिए अनुकूलित किया गया है। इस तरह, आप नियंत्रित कर सकते हैं कि आइटम कहां खींचे जाते हैं।

FrameLayout documentation से

:

बाल विचारों शीर्ष पर हाल ही में जोड़ा बच्चे के साथ, एक ढेर में तैयार कर रहे हैं। फ्रेमलेआउट का आकार अपने सबसे बड़े बच्चे (प्लस पैडिंग) का आकार है, दृश्यमान है या नहीं (यदि फ़्रेमलाउट के पैरेंट परमिट)। देखे गए दृश्यों का उपयोग केवल आकार के लिए किया जाता है यदि setConsiderGoneChildrenWhenMeasuring() को सत्य पर सेट किया गया है।

मुझे आशा है कि इससे मदद मिलती है! यदि आपके और प्रश्न हैं तो मुझे बताएं।

+2

साझा करने की देखभाल क्यों आपने डाउनवॉट किया? – Codeman

0

Android 4.x लिए, आप अपने दो कॉल के बीच) requestLayout कॉल करने के लिए (की जरूरत है:

layout_main.bringChildToFront(layout_main.findViewWithTag("paramsUI")); 
layout_main.requestLayout(); 
layout_main.invalidate(); 
0

आप इस कोड की कोशिश कर सकते हैं। एंड्रॉइड के पुराने और नए संस्करणों पर काम करने लगता है

if (android.os.Build.VERSION.SDK_INT >= 21) //Lollipop 
{ 
    view.setZ(5); 

    for (int i = 0; i < view.getParent().getChildCount(); i++) 
    { 
     if(view != view.getParent().getChildAt(i)) 
     { 
      view.getParent().getChildAt(i).setZ(4); 
     } 
    } 
} 

view.bringToFront(); 
for (int i = 0; i < view.getParent().getChildCount(); i++) 
{ 
    view.getParent().getChildAt(i).invalidate(); 
} 
view.getParent().requestLayout(); 
view.getParent().invalidate(); 
संबंधित मुद्दे