左上の丸い角と左下の丸い角の形を作るにはどうすればよいですか?


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>

しかし、上の形は私が望むものを私に与えませんでした。それは私に丸い角のない長方形を与えます。

回答:


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にバグレポートを提出しましたか、それともすでに報告されていますか?
マティアスコンラッド2010年

3
code.google.com/p/android/issues/detail?id=9161というバグを報告しました。悲しいことに、彼らがバグを修正した後、コードを再度変更する必要があります:(
user256239 2010年

58

この質問はすでに回答済みですが(bottomLeftRadiusとbottomRightRadiusが逆になるバグです)、このバグはandroid 3.1(apiレベル12-エミュレーターでテスト済み)で修正されています。

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


4
別のオプションはvalues/dimens.xml、反転したbottom_leftとbottom_rightの値を含むデフォルトのファイルとvalues-v12/dimens.xml正しい値を持つ新しいファイルを使用することです。そうすれば、ドローアブルXMLファイルのバージョンを1つだけ保持でき、APIバージョンに基づいてdimen値のみが交換されます。
ジョー

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

それは私が最初に試したものでした...しかし希望はありません....私はAndroid2.2でテストしています...他のアイデア...ありがとう
Aamir Shah 2012

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つのアイテムを表示する明るい色の結果:

ここに画像の説明を入力してください

最終結果:

ここに画像の説明を入力してください

宜しくお願いします。


8

このバグはここに提出されます。これは、APIレベルが12未満のAndroidデバイスのバグです。APIレベル12以上で使用されるdrawable-v12フォルダーに正しいバージョンのレイアウトを配置する必要があります。また、同じレイアウトの誤ったバージョン(コーナーの切り替え/反転)は、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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.