【Android開発】Switchウィジェットのスタイルをカスタマイズする方法を徹底解説
Android Switchウィジェットのスタイルをカスタマイズする方法
このチュートリアルでは、AndroidアプリのSwitch(スイッチ)ウィジェットの見た目を自由にカスタマイズする方法を紹介します。thumb(つまみ)とtrack(レール)に独自のDrawableを指定することで、ON/OFFの状態に応じてデザインが切り替わるオリジナルスイッチを作成できます。
ステップ1:新規プロジェクトを作成する
Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成しましょう。
ステップ2:レイアウトファイルを編集する
res/layout/activity_main.xml に以下のコードを追加します。Switchタグの thumb 属性と track 属性に、後ほど作成するカスタムDrawableを指定している点に注目してください。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="4dp"
android:id="@+id/relativeLayout"
tools:context=".MainActivity">
<Switch
android:id="@+id/switchBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="ON"
android:thumb="@drawable/customswitchselector"
android:track="@drawable/custom_track"
android:layout_centerInParent="true"
android:textOff="OFF"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/switchBtn"
android:layout_marginTop="20dp"
android:text="Switch ON and OFF"
android:textSize="24sp"
android:textAlignment="center"
android:textStyle="bold"/>
</RelativeLayout>
ステップ3:つまみ用セレクターを作成する
Drawableリソースファイルとして customswitchselector.xml を作成し、以下のコードを記述します。state_checked の値によって表示を切り替えるセレクター構造になっており、ONのときは緑系のグラデーション、OFFのときは赤色のグラデーションが適用されます。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<shape android:dither="true" android:shape="rectangle" android:useLevel="false" android:visible="true">
<corners android:radius="15dp" />
<gradient android:angle="270" android:endColor="#6600FF00" android:startColor="#66AAFF00" />
<size android:width="37dp" android:height="37dp" />
<stroke android:width="4dp" android:color="#0000ffff" />
</shape>
</item>
<item android:state_checked="false">
<shape android:dither="true" android:shape="rectangle" android:useLevel="false" android:visible="true">
<corners android:radius="15dp" />
<gradient android:angle="270" android:endColor="#ff0000" android:startColor="#ff0000" />
<size android:width="37dp" android:height="37dp" />
<stroke android:width="4dp" android:color="#0000ffff" />
</shape>
</item>
</selector>
ステップ4:トラック用シェイプを作成する
続けて、Drawableリソースファイル custom_track.xml を作成し、以下のコードを記述します。こちらはスイッチの背景となるトラック部分の形状やサイズ(80dp×40dp)を定義したものです。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="https://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:visible="true"
android:dither="true"
android:useLevel="false">
<gradient
android:startColor="#27170432"
android:endColor="#27170432"
android:angle="270"/>
<corners
android:radius="15dp"/>
<size
android:width="80dp"
android:height="40dp" />
</shape>
ステップ5:MainActivity.java を実装する
src/MainActivity.java に以下のコードを追加します。setOnCheckedChangeListener() を利用してスイッチの状態変化を検知し、ON/OFFそれぞれに対応したToastメッセージを表示します。
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Switch aSwitch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aSwitch = findViewById(R.id.switchBtn);
aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Toast.makeText(MainActivity.this, "Switch On", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Switch Off", Toast.LENGTH_SHORT).show();
}
}
});
}
}
ステップ6:AndroidManifest.xml を編集する
androidManifest.xml は以下のように記述します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
アプリを実行してみよう
それでは、実際にアプリを起動してみましょう。ここでは、Androidスマートフォンを実機としてパソコンに接続しているものとします。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。デバイスを選択して実行すると、端末に以下のような画面が表示されます。

補足:新しいプロジェクトでの注意点
標準のSwitchクラスは古いAPIで提供されており、最近のAndroid Studioでは非推奨(Deprecated)扱いになる場合があります。Material Designに準拠したアプリを開発する場合は、androidx.appcompat.widget.SwitchCompat や com.google.android.material.switchmaterial.SwitchMaterial の使用を検討するとよいでしょう。なお、thumb・trackへDrawableを指定してカスタマイズする基本の手順は、本記事の内容とほぼ同じです。
-
BlackBerryからAndroidへの乗り換えガイド:失った機能を取り戻す方法
今年の初め、私はタクシーの中でBlackBerryを紛失してしまいました。スマホを失うのは、避けようのないトラウマになりがちです。写真やメッセージ、思い出を失うこと自体も確かにつらいのですが、本当につらいのはその後の対応です。キャリアのコールセンターで、IMEI番号のブロック手続きと新しいSIMカードの発送を待つ何時間もの時間。Twitterも『Angry Birds』も楽しめない通勤時間。そして何より、新しい端末代を支払わなければならないストレス。新品のBlackBerryに500ポンドを払う気になれず、結局私は安価なAndroid端末を購入しました。Huawei Honor C3はスペック
-
iPhoneからAndroidへ乗り換える方法!連絡先・写真・カレンダー・音楽のデータ移行手順を徹底解説
iPhoneはAppleが設計したスマートフォンで、優れたデバイスであるだけでなく、一時期はステータスシンボルとしても扱われていました。しかし近年、各メーカーが最新のAndroidソフトウェアやスマートテクノロジーを次々と投入しており、Androidスマートフォンも十分に魅力的な選択肢となっています。新しいスマホを購入して、「iPhoneからAndroidにどうやって乗り換えればいいのか?」とお悩みではありませんか。乗り換え時には、連絡先、写真、カレンダーの予定、書類などを新しい端末へ移す必要があり、なかなか大変な作業に感じられますよね。でもご安心ください!この記事では、その手順をわかりやすく