Como faço para definir o raio de canto arredondado de uma cor desenhada usando XML?

StackOverflow https://stackoverflow.com/questions/2122199

  •  22-09-2019
  •  | 
  •  

Pergunta

No site do Android, há um Seção sobre traços de cores. Definir esses desenhos em XML se parece com o seguinte:

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

Na API Java, eles têm o método seguinte para definir cantos arredondados:

setCornerRadius(float radius)

Existe uma maneira de definir os cantos arredondados no XML?

Foi útil?

Solução

Use o <shape> Tag para criar um desenhado em XML com cantos arredondados. (Você pode fazer outras coisas com a tag de forma, como definir um gradiente de cores).

Aqui está uma cópia de um arquivo XML que estou usando em um dos meus aplicativos para criar um desenho com fundo branco, borda preta e cantos arredondados:

<?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:bottomRightRadius="7dp"
             android:bottomLeftRadius="7dp"
             android:topLeftRadius="7dp"
             android:topRightRadius="7dp" /> 
</shape>

Outras dicas

A resposta de Mbaird funciona bem. Esteja ciente de que parece haver um bug no Android (pelo menos 2.1), que se você definir qualquer raio de canto individual como 0, força todos os cantos para 0 (pelo menos esse é o caso das unidades "dp"; eu não fiz 'T tente com outras unidades).

Eu precisava de uma forma onde os cantos superiores estavam arredondados e os cantos inferiores eram quadrados. Consegui isso definindo os cantos que eu queria ser quadrado em um valor um pouco maior que 0: 0,1dp. Isso ainda se renderiza como cantos quadrados, mas não força os outros cantos a serem 0 raio.

Experimente o código abaixo

<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top