ShapeDrawable
ドローアブル自体に何らかのマージンまたはパディングを使用する必要があるため、を使用してこれを行うことはできないと思います。実際にはpadding
属性がありますが、残念ながら、それはのコンテンツにのみ影響しView
、ドローアブル自体には影響しません。
そうは言っても、簡単な解決策は、代わりに9パッチを作成し、それをバックグラウンドとしてに適用することTextView
です。デモンストレーションの目的で:9パッチを次のように表示します。

編集:LayerDrawable
考え直してみると、実際には、を使用して目的の効果を作成する
ことに依存する別のオプションがあります。作成するのは少し面倒で、9パッチを使用するよりも効率的だとは思いませんが、少なくとも画像をレンダリングする必要はありません。つまり、色を変更する必要がある場合などです。 、それはより簡単です。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/rounded" />
<item android:drawable="@android:color/white" android:left="30dp"
android:right="30dp" />
<item android:bottom="30dp" android:drawable="@android:color/white"
android:top="30dp" />
<item android:bottom="30dp" android:left="10dp" android:right="10dp"
android:drawable="@color/pink" android:top="30dp" />
<item android:bottom="10dp" android:left="30dp" android:right="30dp"
android:drawable="@color/pink" android:top="10dp" />
</layer-list>
詳細:@drawable/rounded
自分で投稿したコードスニペットです。次の2つの項目は、白いエッジを作成するためのオフセット付きの単純な白い長方形です。さて、これらもピンクの表面をオーバーレイするので、それに対抗するためにさらに2つのピンクの長方形が必要です(ここでも特定のオフセットがあります)。結果は、質問で示しているものとまったく同じように見える背景になります。
これを少し最適化できるかどうかを確認したい場合があることに注意してください。少なくとも、オフセットをハードコーディングしないことをお勧めします(簡単にするために行ったように)が、とdimens.xml
の両方から参照することでこれらの値を一元化して一貫性を保つことができるように、オフセットをファイルに保存します。ShapeDrawable
LayerDrawable
補遺: ICS以前(またはHoneycomb以前)のデバイスでは、android:drawable
属性で色を直接参照することに問題があるようです。ShapeDrawable
ただし、この色を表す別のドローアブル(9パッチまたは)を設定することで、これを簡単に回避できます。たとえば、上記のスニペットでは、に置き換えます。ここで、android:drawable="@color/pink"
は次のようなxmlファイルになります。android:drawable="@drawable/color_pink"
color_pink
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FCE6C9" />
</shape>
明らかに、で参照されている他のすべての色についても同じことを行う必要がありますLayerDrawable
。ジンジャーブレッド2.3.7でテスト済み。