studio item color android xml-drawable android-drawable layer-list

item - Entendiendo la<layer-list> de Android



shape android studio (2)

No entiendo cómo funcionan las listas de capas. Leí la documentación oficial con algunos ejemplos, pero no funciona como esperé. Quiero cuatro cuadrados que se deben rellenar con 1dp, pero nada es como se esperaba. Aquí hay una captura de pantalla escalada en un 500%:


(Los colores equivocados no importan)
Como puede ver, el tamaño es totalmente incorrecto y faltan los rellenos. Intenté establecer valores reales como ancho / alto y derecha / izquierda / arriba / botón para asegurarme de que Android obtendría el punto que quiero.

Aquí está mi 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>


Los valores de izquierda, superior, derecha e inferior se miden desde su borde respectivo.

Entonces, left = 0dp, top = 0dp, bottom = 0dp & right = 50dp le dará un rectángulo que es (match_parent - 50dp) de ancho y no de 50dp de ancho. Por lo tanto, los valores más grandes para "derecho" en realidad le darán un rectángulo más pequeño.

Lo mismo se aplicaría al otro valor, pero estos se comportarían como se esperaba en la mayoría de los casos, es simplemente "correcto" lo que podría causar confusión.


O utiliza px lugar de dp o multiplica todas las dimensiones por 10 .

Me avergüenza admitir que no sé exactamente POR QUÉ está sucediendo esto, pero supongo que tiene algo que ver con densidades en las que 1dp es un valor de px flotante y ImageView está ampliado.

Respuesta de expertos es bienvenida :)