AndroidのRadioButtonをiPhone風にカスタマイズ!

    Androidの開発をしているとどうしてもiPhoneより無駄に工数が掛かっている気がしてならない今日この頃です…
    解像度の種類が多すぎる事によるlayoutの調整、端末やOSバージョン違いの対応(メモリ制御、各種API、デバイス機能など)、
    そして今回タイトルとして上げたデフォルトオブジェクトや各Viewのデザインのダサさ、、、

    一度テンプレートやClassを作ってしまえば追々流用できるのでいいのですが、どうしてもiPhoneの方が楽に感じてしまいます。
    とボヤキはここまでにしてAndroidのRadioButtonをiPhone風にカスタマイズしてみます。

    因みに、デフォルトのRadioButtonはこれです。

    default

    普通ですね。耐えれなくもないですが、かっこよくはないです。

    まずはラジオボタンを作ります。

    ○Checked(checked_left.xml)
    <shape
      xmlns:android=”http://schemas.android.com/apk/res/android” android:shape=”rectangle”>
      <corners
        android:bottomRightRadius=”2dp”
        android:topLeftRadius=”2dp”
      />
      <stroke android:color=”#222222″ android:width=”0.6dp” />
      <gradient android:startColor=”#4A4A4A” android:endColor=”#333333″ android:angle=”230″ />
    </shape>

    ○非Checked(not_checked_left.xml)
    <shape
      xmlns:android=”http://schemas.android.com/apk/res/android” android:shape=”rectangle”>
      <corners
        android:bottomRightRadius=”2dp”
        android:topLeftRadius=”2dp”
      />
      <stroke android:color=”#222222″ android:width=”0.6dp” />
      <gradient android:startColor=”#7A7672″ android:endColor=”#6B6865″ android:angle=”230″ />
    </shape>

    RadioButtonのbackgroundに紐付ける以下ファイルに上記2ファイルを関連付けます。
    ○非Checked(radio_left.xml)
    <selector xmlns:android=”http://schemas.android.com/apk/res/android”>
      <item
        android:state_checked=”true”
        android:drawable=”@drawable/checked_left” />
      <item
      android:state_checked=”false”
      android:drawable=”@drawable/not_checked_left” />
    </selector>

    これで準備は完了です。
    真ん中のボタン、右側のボタンも同じ要領で作成します。
    真ん中 => cornersタグが不要(丸み無し)
    右側 => cornerタグの丸め位置を反転

    最後に、Activityのレイアウトに用意したradio_left.xml、radio_center.xml、radio_right.xmlを設定します。
    <RadioGroup
      android:id=”@+id/radioGroup1″
      android:layout_width=”fill_parent”
      android:layout_height=”wrap_content”
      android:paddingTop=”5dp”
      android:paddingLeft=”5dp”
      android:paddingRight=”5dp”
      android:orientation=”horizontal”>
      <RadioButton
        android:id=”@+id/radioButtonLeft”
        android:gravity=”center”
        android:textSize=”14sp”
        android:button=”@null”
        android:padding=”5dp”
        android:checked=”true” <= チェック!
        android:layout_width=”wrap_content”
        android:layout_height=”fill_parent”
        android:layout_weight=”1″
        android:text=”@string/left”
        android:background=”@drawable/radio_left”/> <= 左側のボタンチェック!
      <RadioButton
        android:id=”@+id/radioButtonRight”
        android:gravity=”center”
        android:textSize=”14sp”
        android:button=”@null”
        android:padding=”5dp”
        android:layout_width=”wrap_content”
        android:layout_height=”fill_parent”
        android:layout_weight=”1″
        android:text=”@string/right”
        android:background=”@drawable/radio_right”/>
    </RadioGroup>
    <RadioGroup
      android:id=”@+id/radioGroup2″
      android:layout_width=”fill_parent”
      android:layout_height=”wrap_content”
      android:padding=”5dp”
      android:orientation=”horizontal”>
      <RadioButton
        android:id=”@+id/radioButtonLeft1″
        android:gravity=”center”
        android:textSize=”14sp”
        android:button=”@null”
        android:padding=”5dp”
        android:checked=”true” <= チェック!
        android:layout_width=”wrap_content”
        android:layout_height=”fill_parent”
        android:layout_weight=”1″
        android:text=”@string/left1″
        android:background=”@drawable/radio_left”/>
      <RadioButton
        android:id=”@+id/radioButtonLeft2″
        android:gravity=”center”
        android:textSize=”14sp”
        android:button=”@null”
        android:padding=”5dp”
        android:layout_width=”wrap_content”
        android:layout_height=”fill_parent”
        android:layout_weight=”1″
        android:text=”@string/left2″
        android:background=”@drawable/radio_center”/>
      <RadioButton
        android:id=”@+id/radioButtonRight1″
        android:gravity=”center”
        android:textSize=”14sp”
        android:button=”@null”
        android:padding=”5dp”
        android:layout_width=”wrap_content”
        android:layout_height=”fill_parent”
        android:layout_weight=”1″
        android:text=”@string/right1″
        android:background=”@drawable/radio_center”/>
      <RadioButton
        android:id=”@+id/radioButtonRight2″
        android:gravity=”center”
        android:textSize=”14sp”
        android:button=”@null”
        android:padding=”5dp”
        android:layout_width=”wrap_content”
        android:layout_height=”fill_parent”
        android:layout_weight=”1″
        android:text=”@string/right2″
        android:background=”@drawable/radio_right”/>
    </RadioGroup>

    できた!

    iPhone

    色のセンスはなんともいえませんが、iPhoneっぽい!

    ではでは。