Android4.0(以降ICS)では、「トグルスイッチを利用して設定を変更する」でも紹介した通りトグルスイッチ(Switch)が追加されました。
ICSからトグルスイッチを簡易に設定画面(Preference)で使用する為に、
「SwitchPreference」が追加されました。
本エントリでは、「SwitchPreference」とSwitchPreferenceを拡張するための「TwoStatePreference」を紹介します。


図1:トグルスイッチをPreferenceで使用しているサンプル
SwitchPreferenceはPreferenceクラスを継承して作成されたクラスで、
以下要素を新たに持ちます。
表:SwitchPreferenceに追加されているメソッド一覧
| メソッド名 | 概要 |
|---|---|
| setSwitchTextOff() | トグルスイッチに表示されるOFFの時のテキストを設定する |
| setSwitchTextOn() | トグルスイッチに表示されるONの時のテキストを設定する |
| getSwitchTextOff() | トグルスイッチにOFFの時に表示するテキストを取得する |
| getSwitchTextOn() | トグルスイッチにOFFの時に表示するテキストを取得する |
その他、Preferenceとしての使用方法は以下記事を参考にしてください。
設定画面を簡易に作る
それでは、つづきをどうぞ
SwitchPreferenceの使用方法
SwitchPreferenceを使用することで、簡単に設定画面にトグルスイッチを使用できます。
トグルスイッチは、ON/OFFの状態を一目で確認出来るため、WifiモジュールのOn/Offの管理やBlueToothのOn/Offの管理など
デバイス情報の設定項目に使用されています。
SwitchPreferenceの使用方法は、他PreferenceActivityで使用できるCheckboxPreferenceと全く同じです。
以下二つのサンプルコードは、XMLでの使用方法とJavaコードでの使用方法になります。
XMLでの指定方法
XMLでPreferenceを指定する場合には、PreferenceActivityクラスのaddPreferencesFromResource()に作成したXMLリソースを
指定します。
サンプルで指定したXMLファイルは以下の通り。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<SwitchPreference
android:key="checkbox_preference"
android:summary="Summary"
android:switchTextOff="NO"
android:switchTextOn="YES"
android:title="RootのSwitchPreference" />
<PreferenceCategory android:title="サブカテゴリー" >
<SwitchPreference
android:key="checkbox_preference"
android:summary="Summary"
android:switchTextOff="OFF"
android:switchTextOn="ON"
android:title="CategoryのなかのSwitchPreference" />
</PreferenceCategory>
</PreferenceScreen>
Javaソースコードでの指定方法
JavaソースコードでPreferenceを使用する場合には、PreferenceActivityクラスのsetPreferenceScreenメソッドに
PreferenceScreenのインスタンスを引き渡します。
public class SwitchPreferenceSampleActivity extends PreferenceActivity implements OnPreferenceChangeListener{
/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// JavaコードでPreferenceを作成
setPreferenceScreen(createPreferenceHierarchy());
// XMLでPreferenceを作成
// addPreferencesFromResource(R.layout.main);
}
private PreferenceScreen createPreferenceHierarchy() {
// create RootView
PreferenceScreen rootView = getPreferenceManager().createPreferenceScreen(this);
// Switch preference
SwitchPreference switchPref = new SwitchPreference(this);
switchPref.setKey("switch_preference");
switchPref.setTitle("Switch Preference Title");
switchPref.setSummary("Switch Preference Summary");
switchPref.setSwitchTextOff("offだよー");
switchPref.setSwitchTextOn("onだよー");
switchPref.setOnPreferenceChangeListener(this);
rootView.addPreference(switchPref);
// Custom Swich Preference
MyTwoStatePreference customPref = new MyTwoStatePreference(this);
customPref.setKey("custom_preference");
customPref.setTitle("Custom Preference Title");
customPref.setSummary("Custom Preference Summary");
rootView.addPreference(customPref);
return rootView;
}
// ...省略
サンプルソースコードの32行目で、MyTwoStatePreferenceというクラスを使用しています。
このクラスはICS以降で新規に追加されたTwoStatePreferenceクラスを独自拡張し、SwitchPreferenceの様に振る舞わせています。
TwoStatePreferenceクラスの使用方法は以下で解説します。
TwoStatePreferenceの使い方
TwoStatePreferenceクラスは二つの状態を持つ設定項目(CheckboxPreferenceやSwitchPreferenceなど)の為に作成された抽象クラスです。
本エントリで紹介した、SwitchPreferenceを拡張したいとき等はTwoStatePreferenceを使用するとよいでしょう。
ICS以降(APIレベル14から)で新たに作成されたTwoStatePreferenceは、Preferenceクラスを継承して作成されています。
ただし、継承元のPreferenceクラスに新規に追加されているメソッドはコンストラクタの3点のみです。
表2:TwoStatePreferenceクラスに新たに追加されたメソッド
| 追加されたコンストラクタ |
|---|
| public TwoStatePreference (Context context, AttributeSet attrs, int defStyle) |
| public TwoStatePreference (Context context, AttributeSet attrs) |
| public TwoStatePreference (Context context) |
表2内のTwoStatePreference(Context context, AttributeSet attrs, int defStyle)のdefStyleにCheckboxPreferenceのStyle(android.R.attr.checkBoxPreferenceStyle)や、SwitchPreferenceのStyle(android.R.attr.switchPreferenceStyle)を指定することができます。
以下のサンプルコードは、SwitchPreferenceのStyleを指定し、
TwoStatePreferenceクラスを独自拡張した部分のコンストラクタ部分になります。
public class MyTwoStatePreference extends TwoStatePreference {
// constructor
public MyTwoStatePreference(Context context) {
this(context,null);
}
public MyTwoStatePreference(Context context, AttributeSet attrs){
// SwitchPreference を指定
// android.R.attr.checkBoxPreferenceStyle でcheckBoxPreferenceにできる
this(context,attrs,android.R.attr.switchPreferenceStyle);
}
public MyTwoStatePreference(Context context, AttributeSet attrs, int defStyle){
super(context,attrs,defStyle);
}
// ....省略