トグルスイッチを設定画面(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"?>
<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のインスタンスを引き渡します。

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);
    }
 
        // ....省略
One Comment