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


108

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

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

Java APIでは、角の丸い角を定義する次のメソッドがあります。

setCornerRadius(float radius)

丸みを帯びた角をxmlに設定する方法はありますか?


コード見る(グラデーション描画可能)からセットコーナーへ:stackoverflow.com/questions/8709595/...
SAMIS

回答:


319

<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:radius="7dp" /> 
</shape>

1
このファイルを保存する場所と私のJavaコードで取得する方法を教えてください。ありがとう
shyam

7
ドローアブルディレクトリにxmlファイルとして保存し、リソース名(R.drawable.your_xml_name)を使用してドローアブル(アイコンまたはリソースファイル)を使用するのと同じように使用
Guillaume

30
この特定のケースでは、すべての半径が同じであるため、android:radius = "7dp"を使用できます
Will Kru

2
また、半径を別々に定義した場合(同じ値であっても)、Android Studioのレイアウトレンダラーはそれをレンダリングできず、「Pat.isConvexはサポートされていません」という警告が表示されます。<corners android:radius = "7dp" />を使用してください
Francesco Ambrosini

@shyam「背景」として設定できます。TextViewで使用する場合、テキストが丸いエッジで混雑しないように、開始と終了にパディングを追加することを忘れないでください
RowanPD

19

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

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


0.1 dpと書いただけですか?それは機能しますか、私は上部の丸い角と下部の角の角も必要です、ちょうど1 dpを使ったのと同じ問題ですが、角の角と10 dpを角の角に使ったのと同じです。必要に応じて、ドキュメントによると、丸みのない角の設定0が機能しているはずです。
codeScriber 2011年

実際に、それはバグではありません、それはマニュアルにあります:developer.android.com/guide/topics/resources/...
Tsuharesu

1

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

<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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.