web-dev-qa-db-ja.com

Androidの<layer-list>を理解する

レイヤーリストの仕組みがわかりません。私は公式の いくつかの例を含むドキュメント を読みましたが、期待どおりに機能しません。 1dpでパディングする必要がある4つの正方形が必要ですが、予期したとおりではありません。以下は、500%にスケーリングされたスクリーンショットです。

My suares
(間違った色は関係ありません)
ご覧のとおり、サイズが完全に間違っており、パディングが欠落しています。 Androidが必要なポイントを取得できるように、幅/高さや右/左/上/お尻などの実際の値を設定しようとしました。

これが私の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

左、上、右、下の値は、それぞれのエッジから測定されます。

したがって、left = 0dp、top = 0dp、bottom = 0dp、right = 50dpは、(match_parent-50dp)幅で、50dp幅ではない長方形を与えます。したがって、「右」の値を大きくすると、実際には小さな長方形が表示されます。

同じことが他の値にも当てはまりますが、これらはほとんどの場合期待どおりに動作し、混乱を引き起こす可能性のある「正しい」だけです。

100
Andrew Kelly

pxの代わりにdpを使用するか、すべてのディメンションに10を掛けます。

なぜこれが起こっているのか正確にはわからないが、1dpが浮動px値である密度と関係があると推測するImageViewは拡大されます。

専門家の回答は歓迎です:)

5
OcuS