Как установить радиус закругленного угла цвета, который можно рисовать с помощью xml?


108

На сайте Android есть раздел о цветных рисунках . Определение этих чертежей в xml выглядит так:

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

В java api у них есть следующий метод определения закругленных углов:

setCornerRadius(float radius)

Есть ли способ установить закругленные углы в xml?


Чтобы установить углы из кода, см. (Градиентные рисунки): stackoverflow.com/questions/8709595/…
samis

Ответы:


319

Используйте <shape>тег, чтобы создать чертеж в формате XML с закругленными углами. (Вы можете делать и другие вещи с помощью тега формы, например, определять цветовой градиент).

Вот копия XML-файла, который я использую в одном из своих приложений для создания чертежа с белым фоном, черной рамкой и закругленными углами:

<?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
где сохранить этот файл и как получить его в моем java-коде? спасибо
shyam

7
сохраните его как файл xml в каталоге с возможностью рисования, а затем используйте его, как если бы вы использовали любой файл с возможностью рисования (значок или файл ресурсов), используя его имя ресурса (R.drawable.your_xml_name)
Гийом

30
в данном конкретном случае все радиусы одинаковы, поэтому вы могли бы использовать android: radius = "7dp"
Уилл Кру

2
Кроме того, средство визуализации макета в Android Studio не сможет отобразить его, если вы определите радиус отдельно (даже с теми же значениями) и выдаст предупреждение «Pat.isConvex не поддерживается». Просто используйте <corners android: radius = "7dp" />
Франческо Амброзини

@shyam Вы можете установить его как "фон". Если вы используете его в TextView, вам нужно не забыть добавить отступы в начале и в конце, чтобы текст не переполнялся закругленными краями
RowanPD

19

Ответ mbaird работает нормально. Просто имейте в виду, что, похоже, в Android есть ошибка (по крайней мере, 2.1): если вы установите радиус любого отдельного угла на 0, он заставит все углы равняться 0 (по крайней мере, так обстоит дело с блоками "dp"; я не не пробую ни с какими другими агрегатами).

Мне нужна была форма, в которой верхние углы были закругленными, а нижние - квадратными. Я добился этого, установив углы, которые я хотел сделать квадратными, на значение немного больше 0: 0,1dp. Это по-прежнему отображается как квадратные углы, но это не заставляет другие углы иметь радиус 0.


ты только что написал 0.1 dp? это работает, мне также нужны верхние закругленные углы и нижние квадратные, та же проблема, что и вы, я использовал 1 dp, на квадратных углах и 10 dp на круглых, вы правы, это все еще заметно, но дает мне 90% того, что я хотите, согласно документации установка 0 на неокругленных углах должна сработать.
codeScriber

На самом деле это не ошибка, это в документации: developer.android.com/guide/topics/resources/…
Tsuharesu 09

1

Попробуйте под кодом

<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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.