トグルスイッチを設定画面(Preference)で利用する
|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ファイルは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <? xml version = "1.0" encoding = "utf-8" ?> < 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のインスタンスを引き渡します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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クラスを独自拡張した部分のコンストラクタ部分になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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); } // ....省略 |