Como faço para definir o raio de canto arredondado de uma cor desenhada usando XML?
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?
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>