web-dev-qa-db-ja.com

xmlを使用して色のドロアブルの丸い角の半径を設定するにはどうすればよいですか?

Android Webサイトには、 色のドローアブルに関するセクション があります。これらのドロウアブルをxmlで定義すると、次のようになります。

<resources>
    <drawable name="solid_red">#f00</drawable>
    <drawable name="solid_blue">#0000ff</drawable>
    <drawable name="solid_green">#f0f0</drawable>
</resources>

Java AP​​Iには、角丸を定義する次のメソッドがあります。

setCornerRadius(float radius)

Xmlに丸い角を設定する方法はありますか?

99
Jay Askren

<shape>タグを使用して、角が丸いXMLでドロアブルを作成します。 (色のグラデーションの定義など、shapeタグを使用して他の操作を行うこともできます)。

これは、私のアプリの1つで使用しているXMLファイルのコピーで、白い背景、黒い境界線、角の丸いドロアブルを作成しています。

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"> 
    <solid Android:color="#ffffffff"/>    

    <stroke Android:width="3dp"
            Android:color="#ff000000" />

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

    <corners Android:bottomRightRadius="7dp"
             Android:bottomLeftRadius="7dp"
             Android:topLeftRadius="7dp"
             Android:topRightRadius="7dp" /> 
</shape>
285
Mark B

mbairdの答えはうまくいきます。 Android(少なくとも2.1)にバグがあるように見えることに注意してください。個々のコーナーの半径を0に設定すると、すべてのコーナーが強制的に0になります(少なくとも「 dp」ユニット。他のユニットでは試しませんでした)。

上部の角が丸く、下部の角が正方形の形状が必要でした。正方形にしたいコーナーを0よりわずかに大きい値に設定することでこれを達成しました:0.1dp。これはまだ正方形の角としてレンダリングされますが、他の角を強制的に半径0にすることはありません。

18
John Pisello

以下のコードを試してください

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<corners
    Android:bottomLeftRadius="30dp"
    Android:bottomRightRadius="30dp"
    Android:topLeftRadius="30dp"
    Android:topRightRadius="30dp" />
<solid Android:color="#1271BB" />

<stroke
    Android:width="5dp"
    Android:color="#1271BB" />

<padding
    Android:bottom="1dp"
    Android:left="1dp"
    Android:right="1dp"
    Android:top="1dp" /></shape>
0
Mujahid khan