2013-01-21 38 views
51

को समझना मुझे समझ में नहीं आता कि परत-सूचियां कैसे काम करती हैं। मैंने आधिकारिक documentation with some examples पढ़ा लेकिन यह मेरे लिए अपेक्षित काम नहीं करता है। मुझे चार वर्ग चाहिए जो 1 डीपी के साथ गद्देदार होना चाहिए, लेकिन कुछ भी उम्मीद की तरह नहीं है।एंड्रॉइड के <layer-list>

My suares
(गलत रंग में कोई फर्क नहीं है)
आप देख सकते हैं आकार पूरी तरह से गलत है और paddings याद कर रहे हैं: यहाँ एक स्क्रीनशॉट 500% द्वारा बढ़ाया है। मैंने यह सुनिश्चित करने के लिए कि एंड्रॉइड उस बिंदु को प्राप्त करने के लिए चौड़ाई/ऊंचाई और दाएं/बाएं/शीर्ष/बटम जैसे वास्तविक मान सेट करने का प्रयास किया।

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp"> 
     <shape android:shape="rectangle"> 
      <size android:width="9dp" 
       android:height="9dp"/> 
      <solid android:color="#f000"/> 
     </shape> 
    </item> 

    <item android:top="1dp" android:left="1dp" android:bottom="5dp" android:right="5dp"> 
     <shape android:shape="rectangle"> 
      <size android:width="3dp" 
       android:height="3dp"/> 
      <solid android:color="#f00"/> 
     </shape> 
    </item> 
    <item android:top="1dp" android:left="5dp" android:bottom="5dp" android:right="1dp"> 
     <shape android:shape="rectangle"> 
      <size android:width="3dp" 
       android:height="3dp"/> 
      <solid android:color="#0f0"/> 
     </shape> 
    </item> 

    <item android:top="5dp" android:left="1dp" android:bottom="1dp" android:right="5dp"> 
     <shape android:shape="rectangle"> 
      <size android:width="3dp" 
       android:height="3dp"/> 
      <solid android:color="#0f0"/> 
     </shape> 
    </item> 
    <item android:top="5dp" android:left="5dp" android:bottom="1dp" android:right="1dp"> 
     <shape android:shape="rectangle"> 
      <size android:width="3dp" 
       android:height="3dp"/> 
      <solid android:color="#f00"/> 
     </shape> 
    </item> 
</layer-list> 
+0

आपने स्क्रीनशॉट कैसे बनाया? 'छवि का कारण यह मुझे बिल्कुल सही दिखता है ... – OcuS

+0

मैंने दृश्य संपादक को ग्रहण से लिया। – rekire

+0

@rekire संपादक केवल छोटी है, इसलिए आप जानते हैं, यह हमेशा उचित आकार प्रदर्शित नहीं करता है। हमेशा डिवाइस पर जांचें। –

उत्तर

97

बाईं शीर्ष के लिए मूल्यों, सही और नीचे उनके संबंधित किनारे से मापा जाता है।

तो बाएं = 0 डीपी, शीर्ष = 0 डीपी, नीचे = 0 डीपी & दायां = 50 डीपी आपको एक आयत देगा जो (match_parent - 50dp) चौड़ा है और 50 डीपी चौड़ा नहीं है। इसलिए "दाएं" के लिए बड़े मूल्य वास्तव में आपको एक छोटा आयताकार देंगे।

वही अन्य मूल्य पर लागू होगा, लेकिन यह ज्यादातर मामलों में अपेक्षित व्यवहार करेगा, यह सिर्फ "सही" है जो भ्रम पैदा कर सकता है।

+4

एचटीएमएल में पैडिंग की तरह, दाएं = 50 डीपी दाईं ओर 50 डीपी का पैडिंग जोड़ता है। –

+0

किसी भी विचार में कोड में "top = 0dp" को कैसे बदला जाए? –

5

या तो आप dp के बजाय px का उपयोग करें या 10 द्वारा सभी आयामों गुणा करते हैं:

यहाँ मेरी एक्सएमएल है।

मैं स्वीकार करने के लिए मैं वास्तव में नहीं जानता कि यही कारण है कि यह हो रहा है शर्मिंदा हूँ, लेकिन मेरा अनुमान है यह घनत्व जहां 1dp एक अस्थायी px मूल्य है और ImageView को बढ़ाया है के साथ क्या करने के लिए कुछ किया है।

विशेषज्ञ जवाब का स्वागत किया है :)

+0

आप सही हैं, लेकिन मैं डीपीआई अपरिवर्तित होना चाहता हूं। क्या आप कुछ और जानकारी प्रदान कर सकते हैं जैसे कि मुझे वास्तव में आयत (शीर्ष, बाएं, दाएं, नीचे) के सभी मूल्यों की आवश्यकता है और एक विचार है कि डीपी ग्रहण में क्यों काम नहीं कर रहा है। – rekire

+3

मुझे अभी यह जवाब फिर से मिला है अंत में मैंने पीएक्स का इस्तेमाल किया और अन्य स्क्रीनसाइज (एलडीपीआई, एमडीपीआई, एचडीपीआई, एक्सएचडीपीआई और एक्सएक्सएचडीपीआई) के लिए इस्तेमाल किया। – rekire