问题
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%:
(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