Understanding Android&#39;s <layer-list>

拈花ヽ惹草 提交于 2019-11-26 09:24:35

问题


I don\'t understand how the layer-lists work. I read the official documentation with some examples but it does not work for me like expected. I want four squares which should be padded with 1dp, but nothing is like expected. Here is a screenshot scaled by 500%:

\"My
(The wrong colors do not matter)
As you can see the size is completely wrong and the paddings are missing. I tried to set real values like width/height and right/left/top/buttom to be sure that android get the point what I want.

Here is my 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:


The values for left, top, right and bottom are measured from their respective edge.

So left=0dp, top=0dp, bottom=0dp & right=50dp will give you a rectangle that is (match_parent - 50dp) wide and not 50dp wide. Therefore larger values for "right" will actually give you a smaller rectangle.

The same would apply to the other value, but these would behave as expected in most cases, its just "right" that might cause confusion.




回答2:


Either you use px instead of dp or multiply all dimensions by 10.

I'm ashamed to admit that I don't exactly know WHY this is happening but my guess is that it has something to do with densities where 1dp is a floating px value and the ImageView is scaled up.

Expert answer is welcomed :)



来源:https://stackoverflow.com/questions/14436641/understanding-androids-layer-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!