2013-01-21 10 views
51

của Android Tôi không hiểu cách danh sách lớp hoạt động. Tôi đọc chính thức documentation with some examples nhưng nó không làm việc cho tôi như mong đợi. Tôi muốn bốn ô vuông nên được đệm với 1dp, nhưng không có gì giống như mong đợi. Đây là một ảnh chụp màn hình theo tỷ lệ 500%:Tìm hiểu về số điện thoại <layer-list>

My suares
(Những màu sắc sai không quan trọng)
Như bạn có thể thấy kích thước là hoàn toàn sai và miếng đệm không bị thiếu. Tôi đã cố gắng đặt các giá trị thực như chiều rộng/chiều cao và phải/trái/đầu/mông để chắc chắn rằng android có được điểm mà tôi muốn.

Đây là xml của tôi:

<?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

Bạn đã thực hiện ảnh chụp màn hình như thế nào? vì hình ảnh nó mang lại cho tôi trông hoàn toàn chính xác ... – OcuS

+0

Tôi lấy trình chỉnh sửa hình ảnh từ nhật thực. – rekire

+0

@rekire Trình chỉnh sửa chỉ lỗi để bạn biết, nó không phải lúc nào cũng hiển thị hình dạng thích hợp. Luôn kiểm tra trên thiết bị. –

Trả lời

97

Các giá trị cho trái, top, right và đáy được đo từ mép tương ứng của họ.

Vì vậy, left = 0dp, top = 0dp, bottom = 0dp & right = 50dp sẽ cung cấp cho bạn hình chữ nhật rộng (match_parent - 50dp) rộng và không rộng 50dp. Do đó, các giá trị lớn hơn cho "đúng" sẽ thực sự cung cấp cho bạn hình chữ nhật nhỏ hơn.

Điều tương tự cũng áp dụng cho giá trị khác, nhưng chúng sẽ hoạt động như mong đợi trong hầu hết các trường hợp, chỉ "đúng" có thể gây nhầm lẫn.

+4

Giống như phần đệm của nó trong html, phải = 50dp thêm một phần đệm 50dp ở bên phải. –

+0

làm thế nào để thay đổi "top = 0dp" trong mã bất kỳ ý tưởng? –

5

Hoặc bạn sử dụng px thay vì dp hoặc nhân tất cả các khía cạnh của 10.

Tôi xấu hổ phải thừa nhận rằng tôi không biết chính xác tại sao điều này xảy ra nhưng tôi đoán là nó có cái gì để làm với mật độ nơi 1dp là một px giá trị nổi và ImageView được nhân rộng.

câu trả lời chuyên gia được hoan nghênh :)

+0

Bạn nói đúng, nhưng tôi muốn được dpi independed. Bạn có thể cung cấp một số thông tin thêm như nếu tôi thực sự cần tất cả các giá trị của rect (trên, trái, phải, dưới) và một ý tưởng tại sao dp dường như không được làm việc trong nhật thực. – rekire

+3

Tôi chỉ tìm thấy câu trả lời này một lần nữa cuối cùng tôi đã sử dụng px và được sử dụng cho các màn hình khác (ldpi, mdpi, hdpi, xhdpi và xxhdpi) các giá trị khác. – rekire