2009-08-15 22 views
43

Tôi đang cố gắng đặt đệm trong một <shape> được khai báo trong tệp/bố cục XML. Nhưng bất cứ điều gì tôi đặt, không có gì thay đổi liên quan đến padding. Nếu tôi sửa đổi bất kỳ thuộc tính nào khác, tôi sẽ thấy các hiệu ứng trên giao diện người dùng. Nhưng nó không hoạt động với đệm. Bạn có thể vui lòng tư vấn về những lý do có thể khiến điều này có thể xảy ra không?Đệm không ảnh hưởng đến <shape> trong Bố cục XML

Đây là Shape XML Tôi cố gắng để phong cách:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" 
> 
    <stroke android:width="1dp" android:color="#ffffff" 
      android:dashWidth="2dp" 
    /> 

    <solid android:color="@color/button_white_cover" /> 

    <corners android:radius="11dp" /> 

    <padding android:left="1dp" 
      android:top="20dp" 
      android:right="20dp" 
      android:bottom="2dp" /> 
</shape> 

Trả lời

81

Cuối cùng tôi đã giải quyết vấn đề của tôi với đệm.

Vì vậy, phần đệm ở đây sẽ không ảnh hưởng đến hình dạng. Thay vì điều này, bạn sẽ phải áp dụng padding trong drawable khác mà sẽ sử dụng nó. Vì vậy, tôi có thể vẽ có sử dụng hình dạng và ở đó tôi làm như sau:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/shape_below"/> 
    <item android:top="10px" android:right="10px" android:drawable="@drawable/shape_cover"/> 
</layer-list> 

Vì vậy, như bạn có thể nhìn thấy trong giây <item> -element tôi đặt đệm (phía trên và bên phải). Và sau khi tất cả mọi thứ hoạt động.

Cảm ơn.

+0

Hi, Tôi không hiểu làm thế nào để áp dụng giải pháp này cho vấn đề. Tôi có một nút có sử dụng hình dạng và thiết lập adnroid: đầu và android: phải không có hiệu lực. Làm thế nào tôi sẽ giải quyết điều này? Cảm ơn. – icecream

+2

Tôi nghĩ rằng những gì Lyubomyr đang nói là làm một cái gì đó như thế này, mà làm việc cho tôi, nhưng sau đó các góc luôn luôn có một nền trắng đục, gây ra vấn đề hiển thị (xin lỗi cho định dạng trong ý kiến!): \t \t \t \t \t \t \t \t \t \t DustinB

+0

Ngoài chủ đề nhưng có thể hữu ích: nếu bạn có thể vẽ được chỉ là màu, bạn cũng có thể viết như android: drawable = "@ color/divider". NHƯNG này phá vỡ trên các thiết bị cũ. Tôi đã thử nghiệm nó trên 2,2 và nó đã bị hỏng. Không chắc chắn ở cấp độ nào nó đã trở thành chấp nhận được. – Pijusn

13

Câu trả lời bởi Lyobomyr hoạt động, nhưng đây là giải pháp tương tự áp dụng nhưng không có chi phí của việc tạo ra một drawable mới, do đó giảm thiểu sự lộn xộn file:

How to add padding to gradient <shape> in Android?

+0

Cảm ơn câu trả lời này Yahel, nhưng hãy nhớ không chỉ đăng câu trả lời cho liên kết. Luôn cung cấp tất cả thông tin cần thiết trong câu trả lời của bạn vì nội dung liên kết có thể thay đổi hoặc không hợp lệ. – TheIT

31

Là một vài ý kiến ​​đã ám chỉ , cách tiếp cận tốt nhất là quấn <shape> vào phần tử <item> và đặt phần đệm ở đó thay thế. Tuy nhiên, có các tùy chọn khác có sẵn được nêu chi tiết trong liên kết bên dưới. ví dụ

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:left="8dp" 
     android:right="8dp" 
     android:top="8dp" 
     android:bottom="8dp"> 

     <shape android:shape="rectangle"> 
      ... 
     </shape> 
    </item> 
</layer-list> 

Tùy thuộc vào nhu cầu của bạn, thay vì sử dụng một lớp-list, bạn có thể sử dụng bất kỳ loại drawable sau:

  • lớp-list
  • selector
  • cấp danh sách
  • chuyển đổi

Để biết thêm thông tin ab ra các loại drawable sẵn thấy this android documentation

Nguồn:

+0

vâng, bạn không đề cập đến '' – user924

+0

@ user924 Tôi không chắc điểm của bạn là gì. Người ta có thể bao gồm mục bên trong một nếu mục đích đó phục vụ cho một mục đích, nhưng không cần thiết cho câu hỏi ban đầu cũng như không truyền đạt giải pháp chung để lồng nội dung bên trong một với đệm – TheIT

+1

Tôi có nghĩa là tốt hơn để đưa ra một ví dụ mà bạn có thể sao chép và chạy mà không có ấn bản nào, nhưng trong trường hợp này, sẽ không được giải quyết (vì nó phải ở bên trong ) – user924

3

tôi giải quyết vấn đề này như thế này:

<shape android:shape="oval" > 
    <stroke android:width="4dp" android:color="@android:color/transparent" /> 
    <solid android:color="@color/colorAccent" /> 
</shape> 

vừa thêm đột quỵ trong suốt vào nó.

0

Bạn có thể thử insets:

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

    <shape android:shape="rectangle"> 

     <stroke 
      android:width="1dp" 
      android:color="#ffffff" 
      android:dashWidth="2dp" /> 

     <solid android:color="@color/button_white_cover" /> 

     <corners android:radius="11dp" /> 
    </shape> 

</inset> 
Các vấn đề liên quan