Понимание Android <layer-list>

Я не понимаю, как работают слои-списки. Я прочитал официальную документацию с некоторыми примерами, но она не работает для меня, как ожидалось. Я хочу четыре квадрата, которые должны быть дополнены 1dp, но ничего подобного не ожидается. Вот скриншот, масштабированный на 500%:

My suares
(Неправильные цвета не имеют значения)
Как вы видите, размер полностью неправильный, а прокладки отсутствуют. Я пытался установить реальные значения, такие как width/height и right/left/top/buttom, чтобы убедиться, что 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>

Ответ 1

Значения для левого, верхнего, правого и нижнего будут измеряться от их соответствующего края.

Итак, left = 0dp, top = 0dp, bottom = 0dp и right = 50dp даст вам прямоугольник (match_parent - 50dp) в ширину, а не 50dp в ширину. Поэтому более высокие значения для "правого" фактически дадут вам меньший прямоугольник.

То же самое относится к другому значению, но в большинстве случаев они будут вести себя так, как ожидалось, его просто "право", которое может вызвать путаницу.

Ответ 2

Либо вы используете px вместо dp, либо умножаете все размеры на 10.

Мне стыдно признаться, что я точно не знаю, ПОЧЕМУ это происходит, но я предполагаю, что это имеет какое-то отношение к плотностям, где 1dp - это плавающее значение px, а ImageView масштабируется вверх.

Ответ эксперта приветствуется:)