为什么我无法为特定角落创建圆形边框?

时间:2011-12-06 11:57:19

标签: android xml-layout

在我的android xml布局中,我使用borderframe.xml作为背景来应用边框。

borderframe.xml文件如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke 
        android:width="1dip" 
        android:color="#ffffff"/>
    <solid 
        android:color="#95865F"/>
    <corners 
        android:radius="10px"/>

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

现在,虽然有一个android:radius =“10px”然后它是有效的,但是我将圆形到特定的角落,但它不起作用。 log cat中没有任何错误消息,但我在eclipse中发现错误,如:

    The graphics preview in the layout editor may not be accurate:
* Different corner sizes are not supported in Path.addRoundRect.

即使该xml文件中没有填充,我也无法看到任何边框。

现在,我应该为此做些什么? 如果我想为topLeftcorner和bottomLeftCorner创建圆形边框,那么它是什么的解决方案。 ? 感谢。

4 个答案:

答案 0 :(得分:17)

我也面临同样的问题。但为此我使用了图层列表。我在这里发布我的答案可能对你有所帮助。
请检查输出屏幕image 1

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
      <shape 
        android:shape="rectangle">
            <stroke android:width="1dp" android:color="#c1c1c1" />
            <solid android:color="#c1c1c1" />
            <corners android:radius="20dp"/>
        </shape>
   </item>

   <item android:right="20dp"
        >
      <shape 
        android:shape="rectangle">
            <stroke android:width="1dp" android:color="#c1c1c1" />
            <solid android:color="#c1c1c1" />
        </shape>
   </item>

</layer-list>

答案 1 :(得分:10)

你必须这样做,假设你只想要一个圆角的左上角:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
  <corners
      android:radius="20sp"
      android:topRightRadius="0dp"
      android:bottomRightRadius="0dp"
      android:bottomLeftRadius="0dp" />
  <gradient
      android:startColor="@color/logo_blue"
      android:endColor="@color/blue"
      android:angle="0"/>
</shape>

解释:每个角必须(最初)提供大于1的圆角半径,否则没有圆角。如果您希望特定的角不被舍入,则使用android:radius来设置大于1的默认角半径,然后使用您真正想要的值覆盖每个角,提供零(“ 0dp“)你不想要圆角。 [source]

因此,您需要将drawable定义为:

<?xml version="1.0" encoding="UTF-8"?>
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke 
        android:width="1dip" 
        android:color="#ffffff"/>
    <solid 
        android:color="#95865F"/>
    <corners 
       android:radius="10px"
      android:topRightRadius="0dp"
      android:bottomRightRadius="0dp" />

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

<强>更新

来自The Shape Drawable Resource Android Documentation

  

机器人:半径   尺寸。所有角落的半径,作为尺寸   价值或维度资源。每个角落都被覆盖了   以下属性。

重写是您问题的关键字...

答案 2 :(得分:6)

我正在使用SDK工具19,平台工具11并在Android 4.0.3中运行该应用程序。使用以下XML对我有用:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <solid android:color="#dd000000"/>
    <padding 
        android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners
        android:bottomLeftRadius="25dp"
        android:bottomRightRadius="25dp"
        android:topLeftRadius="0dp"
        android:topRightRadius="0dp" />
</shape>

Eclipse警告无法显示预览。在het app中,它显示正确。

答案 3 :(得分:-1)

我在其中一个论坛上找到了解决方案。我通过评论每个角落来解决这个问题。在drawable中添加xml。我保留下面的注释代码只是为了理解。

XML代码 -

   <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
        <solid android:color="#fd2149" />
        <stroke android:width="1dip" android:color="#ffd102"/>
      <!--  <corners
            android:bottomLeftRadius="8dp"
            android:bottomRightRadius="8dp"
            android:topLeftRadius="8dp"
            android:topRightRadius="8dp" />
        -->
        <corners android:radius="8dp" />
    </shape>

--- Edited- 上面的代码是我在drawable文件夹中的back.xml,如果需要,你可以在同一个back.xml中添加填充。对于那些新开发人员,back.xml将从您的布局文件中引用,如下所示

  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textSize="20sp"
    android:scrollbars="vertical"
    android:background="@drawable/back">

希望这有帮助。