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 - エミュレータでテスト済み) で修正されています。

したがって、ドローアブルがすべてのプラットフォームで正しく表示されるようにするには、アプリの res/drawable-v12 フォルダーにドローアブルの「修正済み」バージョン (つまり、xml で左下/右下の半径が実際に正しい場所) を配置する必要があります。このように、Android バージョン >= 12 を使用するすべてのデバイスは正しいドローアブル ファイルを使用しますが、古いバージョンの Android を使用するデバイスは res/drawables フォルダーにある「回避策」のドローアブルを使用します。

于 2011-06-16T17:56:57.247 に答える
15

半径に非常に小さな数値を使用することもできます。

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

3 つの項目を示す明るい色の結果:

ここに画像の説明を入力

最終結果:

ここに画像の説明を入力

よろしくお願いします。

于 2014-12-08T20:55:06.497 に答える
8

このバグはここに提出されます。これは、API レベル 12 未満の Android デバイスのバグです。正しいバージョンのレイアウトを、API レベル 12 以降で使用される drawable-v12 フォルダーに配置する必要があります。また、API レベル 12 未満のデバイスで使用されるデフォルトの drawable フォルダーには、同じレイアウトの誤ったバージョン (角が入れ替わる/反転) が配置されます。

例: 右下の角が丸いボタンを設計する必要がありました。

「drawable」フォルダー - 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 に答える