Як встановити радіус закругленого кута кольору, який можна намалювати за допомогою 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 / ...
саамів

Відповіді:


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.dravable.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 дп, на квадратні кути та 10 дп на круглі, ви праві, це все ще помітно, але дає мені на 90% те, що я Хочете, згідно з документацією, встановленою на 0, куточки повинні бути справними.
codeСписувач

Насправді це не помилка, це в документації: developer.android.com/guide/topics/resources/…
Tsuharesu

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.