如何使用xml设置颜色可绘制的圆角半径?


108

在android网站上,有一个有关color drawables部分。在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

Answers:


319

使用<shape>标记创建带有圆角的XML可绘制对象。(您也可以使用shape标签进行其他操作,例如定义颜色渐变)。

这是我在其中一个应用程序中使用的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
将其另存为drawable目录中的xml文件,然后像使用任何可绘制的(图标或资源文件)使用其资源名称(R.drawable.your_xml_name)一样使用它
Guillaume

30
在这种情况下,所有半径都相同,因此您可以使用android:radius =“ 7dp”
Will Kru

2
另外,如果单独定义半径(即使使用相同的值),则Android Studio中的布局渲染器将无法渲染它,并会警告您“不支持Pat.isConvex”。只需使用<corners android:radius =“ 7dp” />
Francesco Ambrosini

@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

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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.