了解Android <layer-list> </layer-list>

时间:2013-01-21 10:27:16

标签: android xml-drawable android-drawable layer-list

我不明白图层列表是如何工作的。我阅读了官方的documentation with some examples,但它并不像我预期的那样适合我。我想要四个正方形,应该用1dp填充,但没有任何预期。这是按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>

2 个答案:

答案 0 :(得分:100)

左,上,右和下的值是从它们各自的边缘测量的。

左边= 0dp,顶部= 0dp,底部= 0dp&amp; right = 50dp会给你一个矩形,(match_parent - 50dp)宽,而不是50dp宽。因此,“right”的较大值实际上会为您提供一个较小的矩形。

同样适用于另一个值,但这些在大多数情况下会表现得如预期,它只是“正确”,可能会引起混淆。

答案 1 :(得分:5)

您使用px代替dp或将所有尺寸乘以10

我很惭愧地承认我并不确切知道为什么会这样,但我的猜测是它与1dp是浮动px值的密度有关并ImageView按比例放大。

欢迎专家解答:)