web-dev-qa-db-fra.com

Comprendre Android <liste de couches>

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%:

My suares
(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>
55
rekire

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.

100
Andrew Kelly

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 :)

5
OcuS