91

我想用左上圆角和左下圆角制作一个形状:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#555555"/>    

    <stroke android:width="3dp"
            android:color="#555555"
            />

    <padding android:left="1dp"
             android:top="1dp"
             android:right="1dp"
             android:bottom="1dp"
             /> 

    <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="2dp" 
     android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 
</shape>

但是上面的形状并没有给我想要的东西。它给了我一个没有任何圆角的矩形。

4

8 回答 8

68

它看起来像一个错误http://code.google.com/p/android/issues/detail?id=939

最后我必须写这样的东西:

 <stroke android:width="3dp"
         android:color="#555555"
         />

 <padding android:left="1dp"
          android:top="1dp"
          android:right="1dp"
          android:bottom="1dp"
          /> 

 <corners android:radius="1dp"
  android:bottomRightRadius="2dp" android:bottomLeftRadius="0dp" 
  android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 

我必须为左下圆角指定 android:bottomRightRadius="2dp" (这里的另一个错误)。

于 2010-06-16T19:08:08.847 回答
58

虽然已经回答了这个问题(这是一个导致 bottomLeftRadius 和 bottomRightRadius 反转的错误),但该错误已在 android 3.1 中修复(api 级别 12 - 在模拟器上测试)。

所以为了确保你的drawables在所有平台上看起来都是正确的,你应该把drawables的“更正”版本(即左下/右下半径在xml中实际上是正确的)放在你应用程序的res/drawable-v12文件夹中。这样,所有使用 android 版本 >= 12 的设备都将使用正确的可绘制文件,而使用旧版本 android 的设备将使用位于 res/drawables 文件夹中的“解决方法”可绘制文件。

于 2011-06-16T17:56:57.247 回答
36

文档中:

注意:必须(最初)为每个角提供大于 1 的角半径,否则不会圆角。如果您希望特定角不圆角,解决方法是使用 android:radius 将默认角半径设置为大于 1,然后用您真正想要的值覆盖每个角,提供零(“0dp” ) 你不想要圆角的地方。

例如,你必须设置一个android:radius="<bigger than 1dp>"才能做你想做的事:

<corners 
    android:radius="2dp"
    android:bottomRightRadius="0dp" 
    android:topRightRadius="0dp"/> 
于 2013-05-08T14:35:23.553 回答
15

You can also use extremely small numbers for your radius'.

<corners 
  android:bottomRightRadius="0.1dp" android:bottomLeftRadius="2dp" 
 android:topLeftRadius="2dp" android:topRightRadius="0.1dp" />
于 2010-06-17T13:19:47.137 回答
12

对于其他人,有任何 API 级别的解决方案,您可以将一个项目放在彼此之上例如:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<!-- my firt item with 4 corners radius(8dp)
 -->
    <item>
        <shape>
            <solid
                android:angle="270.0"
                android:color="#3D689A" />

            <corners android:topLeftRadius="8dp" />
        </shape>
    </item>
<!-- my second item is on top right for a fake corner radius(0dp)
 -->
    <item
        android:bottom="30dp"
        android:left="50dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>
<!-- my third item is on bottom left for a fake corner radius(0dp)
 -->
    <item
        android:right="50dp"
        android:top="30dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>

</layer-list>

结果用浅色向您展示三个项目:

在此处输入图像描述

最终结果:

在此处输入图像描述

此致。

于 2014-12-08T20:55:06.497 回答
8

此错误在此处提交。这是 API 级别低于 12 的 Android 设备的错误。您必须将正确版本的布局放在 drawable-v12 文件夹中,该文件夹将用于 API 级别 12 或更高级别。并且相同布局的错误版本(角落切换/反转)将被放置在默认可绘制文件夹中,该文件夹将由 API 级别低于 12 的设备使用。

例如:我必须在右下角设计一个带圆角的按钮。

在“可绘制”文件夹中 - button.xml:我必须使左下角变圆。

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>

在“drawable-v12”文件夹中 - button.xml:此处放置了正确版本的布局,用于 API 级别 12 或更高级别。

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>
于 2014-08-24T05:30:55.617 回答
8

尝试这个

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/upkia"/>
<corners android:radius="10dp"
    android:topRightRadius="0dp"
    android:bottomRightRadius="0dp" />
</shape>
于 2018-12-23T05:41:31.420 回答
0

这对我有用

  <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/colorPrimary" />
    <corners
        android:bottomLeftRadius="0dp"
        android:radius="@dimen/dimen_5dp"
        android:topLeftRadius="0dp" />
</shape>

达到了这个

于 2021-04-01T14:42:55.603 回答