2012-09-25 11 views
5

लेआउट में स्थान नहीं लेते हैं क्या एंड्रॉइड में अन्य तत्वों के ऊपर तत्वों को फ़्लोट करना संभव है ताकि वे अपने कंटेनर के लेआउट को प्रभावित न करें?फ़्लोट दृश्य इसलिए वे

enter image description here

ऊपर पीले बॉक्स तत्व मैं अन्य तत्वों के ऊपर तैरने करना चाहते है, लेकिन आप के रूप में:

प्रभाव मैं हासिल करना चाहते हैं एक अस्थायी भाषण-बुलबुले जैसी तत्व है देख सकते हैं कि यह नीचे के भूरे रंग के ऊपर तैरने के बजाय, हरे रंग की बार के नीचे काली जगह बनाने के नीचे अपने कंटेनर को धक्का देता है।

सापेक्ष लयआउट तत्व को उचित स्थिति में रख सकता है लेकिन मुझे तैनात तत्व को इसके कंटेनर की सीमा का विस्तार नहीं करने का कोई तरीका नहीं मिल रहा है। क्या यह एंड्रॉइड पर भी संभव है? और इस तरह "प्रवाह" के भाग के रूप में नहीं गिना जाता है:


उपमा

    वेब दुनिया में
  • बराबर एक तत्व जो है 'निरपेक्ष स्थिति' है (यानी: लेआउट)
  • डब्ल्यूपीएफ दुनिया में
  • बराबर एक तत्व होगा जो कैनवास के अंदर स्थित है। कैनवास की अपनी सीमाएं हैं जो लेआउट में जगह लेती हैं लेकिन इसके बच्चे आईओएस की दुनिया में
  • लेआउट को प्रभावित नहीं कर सकते हैं, प्रत्येक दृश्य को कैनवास के रूप में रखा जाता है (क्योंकि कोई लेआउट प्रबंधक नहीं है) इस व्यवहार bysimply तत्व फ्रेम के x और y गुण
+0

आपका क्या मतलब है "रिलेवेटलाइट उचित रूप से तत्व को स्थिति दे सकता है लेकिन मुझे तैनात तत्व को इसके कंटेनर की सीमा का विस्तार नहीं करने का कोई तरीका नहीं मिल रहा है"? कंटेनर रिश्तेदार है? – JRaymond

उत्तर

10

offsetting हासिल की है RelativeLayout उचित रूप से तत्व रख सकते हैं, लेकिन मैं तैनात तत्व अपने कंटेनर की सीमा का विस्तार नहीं बनाने के लिए एक तरह से नहीं मिल रहा।

फिर आपके पास गलत कंटेनर है।

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

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

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="@string/big" 
     android:textSize="120dip" 
     android:textStyle="bold"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:text="@string/small"/> 

</RelativeLayout> 

Floating buttons

यहाँ, बड़े बटन के शीर्ष पर छोटे बटन तैरता है। छोटा बटन "कंटेनर की सीमा का विस्तार नहीं करता" है, क्योंकि केवल कंटेनर संपूर्ण सामग्री दृश्य है।

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

अन्य उदाहरण में, Roman Nurik shows how to implement a floating "undo bar", जीमेल के लिए समान:

Floating Undo Bar

+1

बहुत बढ़िया जवाब! ऐसा लगता है कि उत्तर नहीं है, एंड्रॉइड लेआउट के हिस्से के रूप में तत्वों की गणना नहीं करने का समर्थन नहीं करता है)। तो वर्कअराउंड या तो 1 हैं) रिलेवेटलाइट कंटेनर यूआई पेड़ को ऊपर रखें ताकि उसकी सीमाओं में आपको जिस स्थान की आवश्यकता हो (यानी: सभी स्क्रीन के तत्व) या 2) फ्रेम तत्वों में सभी तत्वों को लपेटें और 'layout_gravity' 'और तत्व को स्थिति देने के लिए मार्जिन (उपर्युक्त उदाहरण के अनुसार जो आप ऊपर से जुड़े हैं)। विचारों के लिए धन्यवाद! – Marchy

+0

@ मार्की: "एंड्रॉइड लेआउट के हिस्से के रूप में तत्वों की गणना नहीं करने का समर्थन नहीं करता है" - यह सही है। – CommonsWare

1

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

http://developer.android.com/guide/topics/ui/layout/relative.html

उदाहरण:

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

    <TextView 
     android:id="@+id/update" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="#444444" 
     android:text="Update" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 


    <TextView 
     android:id="@+id/lost_of_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/some_button" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:text="text view with lots of text" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <Button 
     android:id="@+id/some_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:text="Some Button" /> 

</RelativeLayout> 

संपादित करें: CommonsWare तेज थी;) अपनी खूबसूरत जवाब पर एक नज़र डालें!

+1

+1 यह उल्लेख करने के लिए कि रिलेटिवलायआउट में तत्व एक-दूसरे के शीर्ष पर होंगे यदि कोई रिश्तेदार संरेखण निर्दिष्ट नहीं है – Marchy