Come si imposta il raggio dell'angolo arrotondato di un colore disegnabile utilizzando xml?


108

Sul sito web di Android, c'è una sezione sui disegni dei colori . La definizione di questi drawable in xml ha questo aspetto:

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

Nell'API Java, hanno il seguente metodo per definire gli angoli arrotondati:

setCornerRadius(float radius)

C'è un modo per impostare gli angoli arrotondati nell'XML?


Per angoli set da codice See (gradiente drawable): stackoverflow.com/questions/8709595/...
Sami

Risposte:


319

Usa il <shape>tag per creare un disegnabile in XML con angoli arrotondati. (Puoi anche fare altre cose con il tag shape come definire un gradiente di colore).

Ecco una copia di un file XML che sto utilizzando in una delle mie app per creare un disegnabile con uno sfondo bianco, bordo nero e angoli arrotondati:

<?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
dove salvare questo file e come ottenerlo nel mio codice java? grazie
shyam

7
salvalo come file xml nella directory drawable, quindi usalo come faresti con qualsiasi drawable (icona o file di risorse) usando il nome della risorsa (R.drawable.your_xml_name)
Guillaume

30
in questo caso particolare tutti i raggi sono gli stessi, quindi avresti potuto usare android: radius = "7dp"
Will Kru

2
Inoltre, il renderer di layout in Android Studio non sarà in grado di renderlo se definisci il raggio separatamente (anche con gli stessi valori) e ti darebbe un avviso "Pat.isConvex non è supportato". Usa <angoli android: radius = "7dp" />
Francesco Ambrosini

@shyam Puoi impostarlo come "sfondo". Se lo usi su un TextView, dovrai ricordarti di aggiungere il riempimento all'inizio e alla fine in modo che il testo non venga affollato dal bordo arrotondato
RowanPD

19

La risposta di mbaird funziona bene. Tieni solo presente che sembra esserci un bug in Android (2.1 almeno), che se imposti il ​​raggio di ogni singolo angolo a 0, forza tutti gli angoli a 0 (almeno questo è il caso delle unità "dp"; provalo con altre unità).

Avevo bisogno di una forma in cui gli angoli superiori fossero arrotondati e gli angoli inferiori quadrati. Ho ottenuto questo risultato impostando gli angoli che volevo fossero quadrati su un valore leggermente più grande di 0: 0.1dp. Questo viene comunque reso come angoli quadrati, ma non forza gli altri angoli ad avere un raggio 0.


hai appena scritto 0.1 dp? funziona, ho anche bisogno di angoli arrotondati superiori e quadrati inferiori, stesso problema che hai appena usato 1 dp, sugli angoli quadrati e 10 dp su quelli rotondi, hai ragione è ancora evidente, ma mi dà il 90% di quello che ho desidera, secondo la documentazione, l'impostazione 0 sugli angoli non arrotondati avrebbe dovuto funzionare.
codeScriber

In realtà non è un bug, è nella documentazione: developer.android.com/guide/topics/resources/…
Tsuharesu

1

Prova sotto il codice

<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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.