2013-01-21 71 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