2013-01-21 17 views
51

Non capisco come funzionano gli elenchi di livelli. Ho letto l'ufficiale documentation with some examples ma non funziona come mi aspettavo. Voglio quattro quadrati che dovrebbero essere riempiti con 1 dp, ma nulla è come previsto. Ecco uno screenshot in scala del 500%:Informazioni su Android <layer-list>

My suares
(I colori sbagliati non importa)
Come si può vedere la dimensione è completamente sbagliato e le imbottiture sono mancanti. Ho provato a impostare valori reali come width/height e right/left/top/buttom per assicurarmi che Android ottenga il punto che voglio.

Ecco il mio xml:

<?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

Come hai fatto lo screenshot? perché l'immagine che mi dà sembra assolutamente corretta ... – OcuS

+0

Ho preso l'editor visivo da Eclipse. – rekire

+0

@rekire L'editor è bacato solo per quello che sai, non mostra sempre la forma corretta. Controlla sempre sul dispositivo. –

risposta

97

I valori per sinistro, in alto, in basso a destra e vengono misurate dal loro rispettivo bordo.

Quindi a sinistra = 0 dpi, superiore = 0 dpi, inferiore = 0 dpi & a destra = 50 dpi vi darà un rettangolo che è (match_parent - 50dp) di larghezza e non 50dp di larghezza. Quindi valori più grandi per "right" ti daranno un rettangolo più piccolo.

Lo stesso si applica all'altro valore, ma questi si comporterebbero come previsto nella maggior parte dei casi, è solo "giusto" che potrebbe causare confusione.

+4

Come il padding in html, right = 50dp aggiunge una padding di 50dp a destra. –

+0

come cambiare "top = 0dp" nel codice qualsiasi idea? –

5

O si usano px invece di dp o moltiplicare tutte le dimensioni da 10.

mi vergogno ad ammettere che non so esattamente perché questo sta accadendo ma la mia ipotesi è che ha qualcosa a che fare con densità dove 1dp è un px flottante e la ImageView è scalato in su.

risposta Esperti è accolto :)

+0

Hai ragione, ma vorrei essere dpi indipended. Potresti fornire ulteriori informazioni come se avessi davvero bisogno di tutti i valori del rect (in alto, a sinistra, a destra, in basso) e un'idea del perché dp non sembra funzionare in eclissi. – rekire

+3

Ho appena trovato nuovamente questa risposta, infine ho usato px e utilizzato per altri schermi (ldpi, mdpi, hdpi, xhdpi e xxhdpi) altri valori. – rekire