如何用左上角的圆角和左下角的圆角制作形状?


84

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

<?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>

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

Answers:


62

看起来像是一个错误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”(这里还有另一个错误)。


1
是的,我可以确认您的最后一个声明/错误,即左右切换到了那里。我的应用程序也经历了同样的情况。(SDK 2.1)。您是否已经在b.android.com上提交了错误报告,或者已经在该报告中报告过?
Mathias Conradt 2010年

3
我刚提交了一个错误,code.google.com/p/android/issues/detail?id=9161。可悲的是,在他们修复了错误之后,我不得不再次更改代码:(
user256239 2010年

58

虽然此问题已得到解答(这是一个导致bottomLeftRadius和bottomRightRadius颠倒的错误),但该错误已在android 3.1(API级别12-在模拟器上测试)中得到修复。

因此,为确保可绘制对象在所有平台上均正确显示,应在应用程序的res / drawable-v12文件夹中放置可绘制对象的“校正”版本(即xml中左下/右半径实际上正确的位置)。这样,所有使用android版本大于等于12的设备都将使用正确的可绘制文件,而使用较早版本的android的设备将使用res / drawables文件夹中的“替代方法”可绘制对象。


4
另一种选择是使用values/dimens.xml包含倒置的bottom_left和bottom_right值的默认文件,以及values-v12/dimens.xml具有正确值的新文件。这样,您可以仅保留可绘制XML文件的单个版本,并且仅会根据API版本交换dimen值。
2014年

35

文档中

注意:必须(最初)为每个角提供大于1的角半径,否则将不对任何角进行圆角处理。如果您不希望对特定的角进行圆角处理,一种变通方法是使用android:radius设置默认的角半径大于1,然后使用您真正想要的值覆盖每个角,并提供零值(“ 0dp” )您不希望有圆角的地方。

例如,您必须设置android:radius="<bigger than 1dp>"才能执行您想要的操作:

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

14

您也可以为半径使用极小的数字”。

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

那是我第一次尝试...但是没有希望...。我正在Android 2.2上进行测试...还有其他想法...谢谢
Aamir Shah

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>

浅色结果向您显示以下三个项目:

在此处输入图片说明

最终结果:

在此处输入图片说明

最好的祝福。


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>

7

试试这个

<?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>
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.