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

Jay*_*ren 99 android drawable

在Android网站上,有一个关于颜色drawables部分.在xml中定义这些drawable如下所示:

<resources>
    <drawable name="solid_red">#f00</drawable>
    <drawable name="solid_blue">#0000ff</drawable>
    <drawable name="solid_green">#f0f0</drawable>
</resources>
Run Code Online (Sandbox Code Playgroud)

在java api中,他们有以下方法来定义圆角:

setCornerRadius(float radius)
Run Code Online (Sandbox Code Playgroud)

有没有办法在xml中设置圆角?

Mar*_*k B 294

使用<shape>标记创建带有圆角的XML格式的drawable.(您可以使用形状标签执行其他操作,例如定义颜色渐变).

这是我在我的一个应用程序中使用的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:bottomRightRadius="7dp"
             android:bottomLeftRadius="7dp"
             android:topLeftRadius="7dp"
             android:topRightRadius="7dp" /> 
</shape>
Run Code Online (Sandbox Code Playgroud)

  • 在这种特殊情况下,所有半径都是相同的,所以你可以使用android:radius ="7dp" (27认同)
  • 将它保存为drawable目录中的xml文件,然后像使用其资源名称(R.drawable.your_xml_name)使用任何drawable(图标或资源文件)一样使用它 (6认同)
  • 此外,如果您单独定义半径(即使具有相同的值),Android Studio中的布局渲染器将无法渲染它,并会给出警告"不支持Pat.isConvex".只需使用<corner android:radius ="7dp"/> (2认同)

小智 18

mbaird的答案很好.请注意,Android中似乎存在一个错误(至少2.1),如果将任何单个角的半径设置为0,它会强制所有角落为0(至少是"dp"单位的情况;我没有不要尝试任何其他单位).

我需要一个顶角是圆形而底角是方形的形状.我通过将我想要的方角设置为略大于0:0.1dp的值来实现这一点.这仍然呈现为方角,但它不会强制其他角落为0半径.


Muj*_*han 8

试试下面的代码

<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>
Run Code Online (Sandbox Code Playgroud)

输出