Làm cách nào để đặt bán kính góc tròn của một màu vẽ được bằng xml?


108

Trên trang web Android, có một phần về màu vẽ . Định nghĩa những thứ có thể kéo này trong xml trông như sau:

<resources>
    <drawable name="solid_red">#f00</drawable>
    <drawable name="solid_blue">#0000ff</drawable>
    <drawable name="solid_green">#f0f0</drawable>
</resources>

Trong java api, chúng có phương thức sau để xác định các góc tròn:

setCornerRadius(float radius)

Có cách nào để đặt các góc tròn trong xml không?


Để đặt các góc từ mã, hãy xem (Gradient Drawables): stackoverflow.com/questions/8709595/…
samis

Câu trả lời:


319

Sử dụng <shape>thẻ để tạo một tệp có thể vẽ trong XML với các góc tròn. (Bạn có thể thực hiện các công việc khác với thẻ hình dạng như xác định độ dốc màu).

Đây là bản sao của tệp XML mà tôi đang sử dụng trong một trong các ứng dụng của mình để tạo một tệp có thể vẽ được với nền trắng, viền đen và các góc tròn:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#ffffffff"/>    
             
    <stroke android:width="3dp"
            android:color="#ff000000" />

    <padding android:left="1dp"
             android:top="1dp"
             android:right="1dp"
             android:bottom="1dp" /> 
             
    <corners android:radius="7dp" /> 
</shape>

1
nơi để lưu tập tin này và làm thế nào để có được nó trong mã java của tôi nhờ?
Shyam

7
lưu nó như một tập tin xml trong thư mục drawable, sau đó sử dụng nó như bạn sẽ sử dụng bất kỳ drawable (icon hay file nguồn) sử dụng tên gọi của nó tài nguyên (R.drawable.your_xml_name)
Guillaume

30
trong trường hợp cụ thể này, tất cả các bán kính đều giống nhau, vì vậy bạn có thể đã sử dụng android: radius = "7dp"
Will Kru

2
Ngoài ra, trình kết xuất bố cục trong Android Studio sẽ không thể hiển thị nó nếu bạn xác định bán kính riêng biệt (ngay cả với các giá trị giống nhau) và sẽ đưa ra cảnh báo "Pat.isConvex không được hỗ trợ". Chỉ cần sử dụng <góc android: bán kính = "7dp" />
Francesco Ambrosini

@shyam Bạn có thể đặt nó làm "nền". Nếu bạn sử dụng nó trên một TextView bạn sẽ cần phải nhớ để thêm đệm cho sự bắt đầu và kết thúc như vậy văn bản không được đông đúc bởi các cạnh tròn
RowanPD

19

câu trả lời của mbaird hoạt động tốt. Chỉ cần lưu ý rằng dường như có một lỗi trong Android (ít nhất là 2.1), rằng nếu bạn đặt bán kính của bất kỳ góc riêng lẻ nào thành 0, nó buộc tất cả các góc về 0 (ít nhất đó là trường hợp với đơn vị "dp"; tôi đã không 't thử nó với bất kỳ đơn vị nào khác).

Tôi cần một hình dạng mà các góc trên cùng được làm tròn và các góc dưới cùng là hình vuông. Tôi đã đạt được điều này bằng cách đặt các góc tôi muốn vuông thành giá trị lớn hơn một chút so với 0: 0,1dp. Điều này vẫn hiển thị dưới dạng các góc vuông, nhưng nó không buộc các góc khác phải là bán kính 0.


bạn vừa viết 0,1 dp? nó có hoạt động không, tôi cũng cần các góc tròn phía trên và các góc vuông phía dưới, vấn đề tương tự như bạn vừa sử dụng 1 dp, trên các góc vuông và 10dp trên các góc tròn, bạn đúng là nó vẫn đáng chú ý, nhưng cho tôi 90% những gì tôi muốn, theo tài liệu cài đặt 0 trên các góc chưa được bao quanh nên đã hoạt động.
codeScriber

Thực ra đó không phải là lỗi, nó nằm trong tài liệu: developer.android.com/guide/topics/resources/…
Tsuharesu

1

Hãy thử mã bên dưới

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
    android:bottomLeftRadius="30dp"
    android:bottomRightRadius="30dp"
    android:topLeftRadius="30dp"
    android:topRightRadius="30dp" />
<solid android:color="#1271BB" />

<stroke
    android:width="5dp"
    android:color="#1271BB" />

<padding
    android:bottom="1dp"
    android:left="1dp"
    android:right="1dp"
    android:top="1dp" /></shape>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.