Понимание Андроида


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


(неправильные цвета не имеют значения)
Как вы можете видеть, размер полностью неверен, и прокладки отсутствуют. Я попытался установить реальные значения, такие как ширина/высота и 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>
2 55

2 ответа:

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

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

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

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

мне стыдно признаться, что я не знаю, почему это происходит, но я думаю, что это как-то связано с плотностью, где 1dp - плавучий px значение и ImageView увеличивается.

экспертный ответ приветствуется :)