【Androidアプリケーションの設定画面を作ろう】PreferenceManagerを使う

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

PreferenceManagerはPreferenceActivityやPreferenceFragmentからプリファレンスの管理を補助するためのクラスです。
今回はPreferenceManagerの使い方を説明します。

PreferenceManagerインスタンスを取得する

PreferenceManagerはプログラマーがインスタンス化するものではありません。
PreferenceManagerインスタンスはPreferenceActivity#getPreferenceManagerまたはPreferenceFragment#getPreferenceManagerを使って取得します。 PreferenceActivity#getPreferenceManagerで取得するには条件があり、ヘッダーリストを使わない方法で実装された場合のみインスタンスが取得することができます。
    PreferenceManager preferenceManager = getPreferenceManager();

SharedPreferencesインスタンスを取得する

SharedPreferencesを取得することでプリファレンスの値を使用することができます。
    PreferenceManager preferenceManager = getPreferenceManager();
    SharedPreferences sharedPreferences = preferenceManager.getSharedPreferences();

使用するプリファレンスを指定する

デフォルトプリファレンスは”[package名]_preferences.xml”というファイル名でアプリケーション内のデータ領域に保存されます。
別のファイルとして保存するにはPreferenceManager#setSharedPreferencesNameメソッドを使用します。
このメソッドはPreferenceManagerの他メソッドを使用する前に使用しておく必要があります。
    PreferenceManager preferenceManager = getPreferenceManager();
    preferenceManager.setSharedPreferencesName("hoge");
    String sharedPreferencesName = preferenceManager.getSharedPreferencesName();

プリファレンスのモードを変更する

プリファレンスはxmlファイルに保存されます。
このファイルのモードはPreferenceManager#setSharedPreferencesModeを使い変更することができます。
    PreferenceManager preferenceManager = getPreferenceManager();
    preferenceManager.setSharedPreferencesMode(MODE_PRIVATE);
    int sharedPreferencesMode = preferenceManager.getSharedPreferencesMode();

プリファレンスの保存位置を変更する

プリファレンスファイルが保存されるパスは2つあります。
“/data/user/”以下にある通常のアプリケーション領域と”/data/user_de/”以下にあるデバイス保護されたアプリケーション領域です。

通常のアプリケーション領域に変更する

    PreferenceManager preferenceManager = getPreferenceManager();
    preferenceManager.setStorageDefault();
    boolean storageDefault = preferenceManager.isStorageDefault();
    SharedPreferences sharedPreferences = preferenceManager.getSharedPreferences();

デバイス保護のアプリケーション領域に変更する

    PreferenceManager preferenceManager = getPreferenceManager();
    preferenceManager.setStorageDeviceProtected();
    boolean storageDeviceProtected = preferenceManager.isStorageDeviceProtected();
    SharedPreferences sharedPreferences = preferenceManager.getSharedPreferences();

PreferenceScreenインスタンスを作成する

PreferenceScreenは 設定画面を表すクラスです。このクラスの内部にPreferenceを配置することで設定項目を配置することができます。
    PreferenceManager preferenceManager = getPreferenceManager();
    PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(getActivity());

Preferenceインスタンスを取得する

Preference findPreference(CharSequence key)はxmlリソースID等で読み込んだ設定画面の設定項目の中からkeyで指定した値と一致するkey属性を持つ設定項目を表すPreferenceインスタンスを取得します。
一致するものがない場合はnullを返却します。

    PreferenceManager preferenceManager = getPreferenceManager();
    Preference preference = preferenceManager.findPreference("hoge");

独自のPreferenceDataStoreを使用する

PreferenceDataStoreを継承したクラスをvoid setPreferenceDataStore(PreferenceDataStore dataStore)を使用することで独自のデータ保存が可能になります。
例えばクラウド上にデータを保存したい時やクラウド上のデータを取得する時にはこのメソッドを使用します。
    PreferenceManager preferenceManager = getPreferenceManager();
    MyPreferenceDataStore myPreferenceDataStore = new MyPreferenceDataStore();
    preferenceManager.setPreferenceDataStore(myPreferenceDataStore);
    PreferenceDataStore preferenceDataStore = preferenceManager.getPreferenceDataStore();