【问题标题】:Understanding Android's <layer-list>了解 Android 的 <layer-list>
【发布时间】:2013-01-04 09:21:17
【问题描述】:

我不明白图层列表是如何工作的。我阅读了官方documentation with some examples,但它并不像预期的那样对我有用。我想要四个应该用 1dp 填充的正方形,但没有什么像预期的那样。这是一个放大 500% 的屏幕截图:


(颜色不对也没关系)
如您所见,大小完全错误,并且缺少填充。我尝试设置真正的值,如宽度/高度和右/左/上/按钮,以确保 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>

【问题讨论】:

  • 你是怎么截屏的?因为它给我的图像看起来绝对正确......
  • 我从 eclipse 中获取了可视化编辑器。
  • @rekire 编辑器有问题,所以你知道,它并不总是显示正确的形状。始终检查设备。

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


【解决方案1】:

left、top、right 和 bottom 的值是从它们各自的边缘测量的。

所以 left=0dp, top=0dp, bottom=0dp & right=50dp 会给你一个 (match_parent - 50dp) 宽而不是 50dp 宽的矩形。因此,“right”的较大值实际上会给您一个较小的矩形。

这同样适用于其他值,但在大多数情况下它们的行为与预期相同,只是“正确”可能会引起混淆。

【讨论】:

  • 和html中的padding一样,right=50dp在右边添加50dp的padding。
【解决方案2】:

要么使用px 而不是dp,要么将所有维度乘以10

我很惭愧地承认我并不完全知道为什么会发生这种情况,但我的猜测是它与密度有关,其中 1dp 是一个浮动的 px 值和 @987654326 @ 被放大了。

欢迎专家回答:)

【讨论】:

  • 你是对的,但我想独立于 dpi。您能否提供更多信息,例如我是否真的需要 rect 的所有值(上、左、右、下)以及为什么 dp 似乎在 eclipse 中不起作用。
  • 我刚刚再次找到这个答案,最后我使用了 px 并用于其他屏幕尺寸(ldpi、mdpi、hdpi、xhdpi 和 xxhdpi)其他值。
猜你喜欢
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多