Je ne comprends pas comment fonctionnent les listes de couches. Je lis le fonctionnaire documentation avec quelques exemples mais cela ne fonctionne pas pour moi comme prévu. Je veux quatre carrés qui devraient être remplis avec 1dp, mais rien n’est comme prévu. Voici une capture d'écran sur 500%:
(Les mauvaises couleurs ne comptent pas)
Comme vous pouvez le constater, la taille est complètement incorrecte et les rembourrages sont manquants. J'ai essayé de définir des valeurs réelles telles que width/height et right/left/top/buttom pour être sûr que Android obtenir le point que je veux.
Voici mon 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>
Les valeurs pour left, top, right et bottom sont mesurées à partir de leur bord respectif.
Donc, left = 0dp, top = 0dp, bottom = 0dp et right = 50dp vous donnera un rectangle de largeur (match_parent - 50dp) et non de 50dp. Par conséquent, des valeurs plus grandes pour "right" vous donneront un rectangle plus petit.
La même chose s’appliquerait à l’autre valeur, mais ceux-ci se comporteraient comme prévu dans la plupart des cas, c’est juste "juste" qui pourrait semer la confusion.
Soit vous utilisez px
au lieu de dp
ou vous multipliez toutes les dimensions par 10
.
J'ai honte d'admettre que je ne sais pas exactement POURQUOI cela se produit mais je suppose que cela a quelque chose à voir avec les densités où 1dp
est une valeur px
flottante et le ImageView
est mis à l'échelle.
La réponse de l'expert est la bienvenue :)