【Android】背景形状(shape)の定義

Android Tipsプログラミング

shapeタグを使用することにより、グラデーションや枠線、角丸などの効果を持った背景形状を定義できます。
これでボタンをわざわざ画像にする機会も減りますね。
定義した形状は、backgroundで指定して使用します。
注意点としては、とある角(例えば右上の角)だけ丸くしない(0dpを指定)はできないようです。

drawable/my_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle" // rectangle | oval | line | ring
>

<!-- 角を丸める -->
<corners
  android:radius="5dp" // すべての角を半径5pxの円で丸める
  android:topLeftRadius="5dp" // 左上の角を半径5pxの円で丸める
  android:topRightRadius="5dp" // 右上の角を半径5pxの円で丸める
  android:bottomLeftRadius="5dp" // 左下の角を半径5pxの円で丸める
  android:bottomRightRadius="5dp" // 左下の角を半径5pxの円で丸める
/>

<!-- グラデーション -->
<gradient
  android:angle="270" // グラデの角度(3時を基準として時計回り)
  android:startColor="@color/white" // この色から、
  android:centerColor="@color/blue" // この色を通って、
  android:endColor="@color/black" // この色へグラデーションする
  android:type="linear" // linear | radial | sweep
  android:centerX="0.5" // グラデの中心のX座標割合(0~1.0) radial,sweepで有効
  android:centerY="0.5" // グラデの中心のY座標割合(0~1.0) radial,sweepで有効
  android:gradientRadius="10" // radialで有効
  android:usesLevel="true" // LevelListDrawableを使用するか
/>

<!-- パディング -->
<padding
  android:left="5dp" android:top="5dp" android:right="5dp" android:bottom="5dp"
/>

<!-- この形状の幅と高さ -->
<size
  android:width="100dp" android:height="100dp"
/>

<!-- この形状の色 -->
<solid
  android:color="@color/black"
/>

<!-- 枠線 -->
<stroke
  android:width="3dp" // 枠の幅
  android:color="@color/gray" // 枠の色
  android:dashWidth="5dp" // 点線枠の幅
  android:dashGap="1dp" // 点線枠の間隔
/>
</shape>

layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
>
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:background="@drawable/my_shape"
  android:text="Test"
/>
</LinearLayout>

参考: リソースの定義
参考: レイアウトの部品化

コメント