2009-10-25 33 views
48

Tôi có hình dạng có độ dốc mà tôi đang sử dụng làm dải phân cách giữa các mục ListView. Tôi đã xác định nó như sau:Cách thêm đệm vào gradient <shape> trong Android?

<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

<gradient 
    android:startColor="#ccd0d3" 
    android:centerColor="#b6babd" 
    android:endColor="#ccd0d3" 
    android:height="1px" 
    android:angle="0" /> 

</shape> 

Tôi muốn thêm 6 pixel đệm ở hai bên của đường viền, để nó không kéo dài từ mép này sang cạnh của màn hình.

Tuy nhiên, bất kể tôi đặt android:left="6px"android:right="6px", dường như nó không có hiệu lực. Tôi có thể đặt nó trong phần tử <shape>, thành phần <gradient> hoặc trong một con riêng biệt <padding> của <shape> và nó không thay đổi bất kỳ thứ gì.

Làm cách nào để thêm đệm vào bên trái và bên phải của ngăn danh sách của tôi?

+0

Tôi đã cập nhật tất cả các câu trả lời cho sử dụng dp không PX vì hầu hết các nhà phát triển thời gian nên đang sử dụng dp để tính đến mật độ màn hình khác nhau: http://developer.android.com/guide/practices/screens_support.html – Intrications

+2

Ngoài các nhận xét và giải pháp nói không sử dụng px, hãy sử dụng dp - Tôi muốn thêm gradient không có thuộc tính chiều cao và là vô ích trong trường hợp này. Chiều cao nên được áp dụng như một thuộc tính của một yếu tố . – prodaea

+0

Bản sao có thể có của [Đệm không ảnh hưởng đến trong Bố cục XML] (http://stackoverflow.com/questions/1283085/padding-doesnt-affect-shape-in-an-xml-layout) – tir38

Trả lời

20

Một giải pháp có vẻ là "quấn" bản vẽ của tôi với một đối tượng có thể vẽ khác để chỉ định phần đệm phù hợp.

Ví dụ, list_divider.xml sẽ là:

<?xml version="1.0" encoding="UTF-8"?> 
<layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:left="6dp" 
     android:right="6dp" 
     android:drawable="@drawable/list_divider_inner" /> 

</layer-list> 

Và sau đó list_divider_inner.xml sẽ là bản gốc drawable:

<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

<gradient 
    android:startColor="#ccd0d3" 
    android:centerColor="#b6babd" 
    android:endColor="#ccd0d3" 
    android:height="1px" 
    android:angle="0" /> 

</shape> 

này kết quả trong hai tập tin để xác định một chia đơn giản mặc dù. Tôi không biết nếu có một cách để làm điều đó chỉ với một tập tin mặc dù.

+1

px sẽ xem * tuyệt vời * một điện thoại xhdpi hiện đại. - Không sử dụng px ** bao giờ **. Sử dụng ** dp ** cho đồ họa và ** sp ** cho kích thước phông chữ thay thế. Đọc: http://developer.android.com/guide/practices/screens_support.html – Martin

+1

@Martin Tôi đã cập nhật câu trả lời để sử dụng dp để tránh sao chép và dán thực tiễn không tốt. – Intrications

+6

Câu hỏi này là về việc sử dụng dải phân cách giữa các mục xem danh sách. Đối với tình huống cụ thể này, tôi đã đặc biệt muốn sử dụng một điểm phân tách pixel bất kể độ phân giải của thiết bị là gì, vì vậy px là chính xác. – emmby

131

Tôi đoán bạn có thể kết hợp nó như thế này:

<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:left="6dp" 
      android:right="6dp"> 

     <shape android:shape="rectangle"> 
      <gradient android:startColor="#ccd0d3" 
         android:centerColor="#b6babd" 
         android:endColor="#ccd0d3" 
         android:height="1px" 
         android:angle="0"/> 
     </shape> 
    </item> 
</layer-list> 
+1

Giải pháp này tốt hơn vì nó chỉ sử dụng một tệp. –

+1

Hoạt động tuyệt vời với thay đổi nhỏ nhất: android: right = "6px" /> phải là android: right = "6px"> – OrhanC1

+9

Tất nhiên không nên sử dụng px - luôn sử dụng ** dp ** hoặc ** sp **. – Martin

45

Một giải pháp khác sử dụng hình chữ nhật:

<?xml version="1.0" encoding="UTF-8"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:insetLeft="6dp" 
    android:insetRight="6dp" > 

    <shape 
     android:shape="rectangle"> 

    <gradient 
     android:startColor="#ccd0d3" 
     android:centerColor="#b6babd" 
     android:endColor="#ccd0d3" 
     android:height="1px" 
     android:angle="0" /> 

    </shape> 

</inset> 
+0

@ntrications: không cần chỉnh sửa, tôi sử dụng px thay vì dp tại đây vì người hỏi muốn điều đó. – Wayne

+1

Bằng cách này, bạn cũng có thể có nó trong tập tin chọn. – elimirks

Các vấn đề liên quan