2010-04-13 15 views
16

परत कैसे मुझे लगता है कि दृश्य वर्ग फैली एक कस्टम निर्मित दृष्टिकोण है। मैं अपने कस्टम व्यू के दो उदाहरण सीधे एक दूसरे के शीर्ष पर स्तरित करना चाहता हूं। मेरी लेआउट फ़ाइल को यह कैसे प्राप्त करना चाहिए?विचारों

उत्तर

27

बाहर कर देता है FrameLayout मैं क्या चाहता था। ..

<FrameLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <com.proj.MyView 
      android:id="@+id/board1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 

     <com.proj.MyView 
      android:id="@+id/board2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 

    </FrameLayout> 
+2

धन्यवाद दोस्त: ऊंचाई & छाया पर

अधिक जानकारी। मैं इसके बारे में पागल हो रहा था और ऐसा लगता है कि यह काफी अच्छा काम करता है। मैंने सोचा था कि फ्रेमलेआउट केवल एक बार में एक दृश्यमान बच्चे दृश्य देख सकता था ... मैं पहले से ही अपना खुद का लेआउट बनाने की कोशिश कर रहा था और ऐसा सोचने जैसा था: एक आसान तरीका होना चाहिए! पीएस ओह और मामले में यह स्पष्ट नहीं है, दृश्य डिफ़ॉल्ट रूप से ऊपर से नीचे तक गाया जाता है, ताकि board2 board1 के ऊपर बनाए हो जाता है। – Timo

+1

बहुत अच्छा है। मुझे कहना है, मुझे नापसंद है कि कितनी बार सापेक्ष लेआउट का उपयोग किया जाता है और मुझे खुशी है कि यह एक का उपयोग नहीं करता है। (रिश्तेदार इतने गन्दा हैं! प्रत्येक एकल वस्तु को अपनी स्थिति का वर्णन करने वाले कुछ विशेषताओं की आवश्यकता होती है! ऐसा लगता है कि लेआउट का उपयोग करने के उद्देश्य को हरा देता है ...) – ArtOfWarfare

24

एक RelativeLayout का प्रयोग करें। बाद में RelativeLayout के बच्चे पहले बच्चों को ओवरलैप करेंगे।

5

हालांकि यह सच आप एपीआई 21 और उच्च में RelativeLayout और FrameLayout, का उपयोग कर लेयरिंग प्राप्त कर सकते हैं कि चीजें बदल गई: बस अपने लेआउट में करते हैं।

एपीआई 21 और उच्च में, एक्सएमएल के बाद के बच्चों मतलब यह नहीं है यह पहले बच्चों को ओवरलैप होगा। इसके बजाय, यह निर्धारित करने के लिए कि कौन सा दृश्य अन्य दृश्य (जेड-इंडेक्स) ओवरलैप करेगा, यह Elevation का उपयोग करता है।

उदाहरण के लिए

, यदि आप कुछ इस तरह की है।

<FrameLayout 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"> 

    <Button 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/white" 
     android:text="Hello World" 
     android:layout_gravity="top" /> 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="10dp" 
     android:background="@android:color/black" 
     android:layout_gravity="bottom" /> 

</FrameLayout> 

View दिखाई भले ही यह Button के बाद जोड़ा गया है नहीं होगा। ऐसा इसलिए है क्योंकि ButtonView से अधिक ऊंचाई है। जेड-इंडेक्स को पुनर्व्यवस्थित करने के लिए आप elevation संबंधित विचारों में विशेषता जोड़ सकते हैं।

<FrameLayout 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"> 

    <Button 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/white" 
     android:text="Hello World" 
     android:layout_gravity="top" 
     android:elevation="0dp" /> 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="10dp" 
     android:background="@android:color/black" 
     android:layout_gravity="bottom" 
     android:elevation="2dp" /> 

</FrameLayout> 

इस तरह ViewButton ओवरलैप होगा। https://material.io/guidelines/material-design/elevation-shadows.html

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