【问题标题】:How to make a shape with left-top round rounded corner and left-bottom rounded corner?如何制作左上圆角和左下圆角的形状?
【发布时间】:2010-06-16 18:46:01
【问题描述】:

我想制作一个带有左上圆角和左下圆角的形状:

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

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

【问题讨论】:

    标签: android android-shape


    【解决方案1】:

    它看起来像一个错误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"(这里的另一个错误)。

    【讨论】:

    • 是的,我可以确认您的最后一个声明/错误,即左/右已切换到那里。我在我的应用程序中也遇到了同样的情况。 (SDK 2.1)。您是否已经在 b.android.com 上为它提交了错误报告,或者它已经在那里报告了?
    • 我刚刚提交了一个错误,code.google.com/p/android/issues/detail?id=9161。可悲的是,在他们修复了错误之后,我不得不再次更改我的代码:(
    【解决方案2】:

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

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

    【讨论】:

    • 另一个选项是使用包含倒置的 bottom_left 和 bottom_right 值的默认 values/dimens.xml 文件,以及具有 正确 值的新 values-v12/dimens.xml 文件。这样您就可以只保留一个可绘制 XML 文件的版本,并且仅根据 API 版本交换维度值。
    【解决方案3】:

    来自documentation

    注意: 必须(最初)为每个角提供大于 1 的角半径,否则不会圆角。如果你想具体 不圆角,解决方法是使用 android:radius 设置大于 1 的默认角半径,但随后覆盖每个和 每个角落都有你真正想要的值,提供零(“0dp”) 不想要圆角的地方。

    例如你必须设置一个android:radius="&lt;bigger than 1dp&gt;" 才能做你想做的事:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 那是我第一次尝试...但没有希望...我正在 Android 2.2 上进行测试...任何其他想法...谢谢
      【解决方案5】:

      对于其他人来说,任何 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>
      

      结果用浅色显示三个项目:

      最终结果:

      最好的问候。

      【讨论】:

        【解决方案6】:

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

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

        在 'drawable' 文件夹 - 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>
          

          【讨论】:

            【解决方案8】:

            这对我有用

              <?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-05-25
              • 1970-01-01
              • 2017-11-12
              • 2021-01-29
              • 1970-01-01
              • 1970-01-01
              • 2021-05-04
              • 2021-01-13
              • 2018-02-03
              相关资源
              最近更新 更多