2013-01-21 31 views
51

我不明白图层列表是如何工作的。我阅读官方documentation with some examples,但它不像我预期的那样工作。我想要四个正方形应该用1dp填充,但没有像预期的那样。下面是500%缩放截图:了解Android的<layer-list>

My suares
(错误的颜色并不重要)
正如你所看到的大小是完全错误的和补白失踪。我试图设置像width/height和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> 
+0

你是如何制作屏幕截图的? '因为它给我的图像看起来绝对正确...... – OcuS

+0

我从eclipse中取得了视觉编辑器。 – rekire

+0

@rekire编辑器是越野车,所以你知道,它并不总是显示正确的形状。始终检查设备。 –

回答

97

为左,上的值,右侧和底部从它们各自的边缘测量。

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

这同样适用于其他值,但这些行为在大多数情况下会像预期的那样行事,它的“正确”可能会导致混淆。

+4

它像在html中的填充,右= 50dp在右侧添加了50dp的填充。 –

+0

如何在代码中更改“top = 0dp”的任何想法? –

5

无论您使用px,而不是dp10乘以各个方面。

我羞于承认,我不知道到底为什么发生这种情况,但我的猜测是,它是与密度,其中1dp是浮动px值和ImageView被放大。

专家回答是欢迎:)

+0

你是对的,但我想成为dpi independ。你能否提供更多的信息,比如我是否真的需要rect的所有值(顶部,左侧,右侧,底部)以及为什么dp似乎不能在eclipse中工作的想法。 – rekire

+3

我刚刚找到了这个答案,最后我终于使用了px并用于其他屏幕尺寸(ldpi,mdpi,hdpi,xhdpi和xxhdpi)其他值。 – rekire