プリファレンス
■プリファレンスとは?
設定値の保存。キーと値のペアで保存される。
実態は xmlファイルで /data/data/(パッケージ名)/shared_pref に保存される。
■プリファレンスオブジェクトの取得
SharedPreferences sp = getPreferences(モード);
または
SharedPreferences sp = getSharedPreferences(ファイル名,モード);
getPreferencesは(アクティヴィティ名).xml になる。
モードは以下を指定
MODE_PRIVATE | このアプリだけで使用可能 |
MODE_WORLD_READABLE | 他のアプリから読み取り可能 |
MODE_WORLD_WRITEABLE | 他のアプリから書込み可能 |
■データの保存
保存はプリファレンスオブジェクトからEditorクラスを取得し、 putXXX系(XXXはデータ型)のメソッドでデータを指定した後、commitメソッドで保存する。
SharedPreferences sp = getPreferences(MODE_PRIVATE); Editor editor = sp.edit(); editor.putString("test", str); // キー、値 editor.commit();
putString、putBoolean、putFloat、putInt、putLong が使用できる。
■データの読み込み
読み込みはプリファレンスオブジェクトのgetXXX系(XXXはデータ型)のメソッドでキーを指定する。
SharedPreferences sp = getSharedPreferences("pref",MODE_PRIVATE); String str = sp.getString("test", ""); // キー、デフォールト値
■Preference用のActivity
設定保存用のActivity。まずはxmlを作成。
[File]-[New]-[Other]で「Android」の「Android XML File」から「ResourceType」を「Preference」にする。
「RootElement」は「PreferenceScreen」を選択していることを確認し、ファイル名は「pref.xml」などを入力
「finish」を推すことで/res/xml にファイルが作られる。
Activityを新たに追加(例:PrefActivity)。その中でPreferenceFragmentを継承したクラスを作りxmlを読み込む。そのFragmentを画面に設定する。
public class PrefActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_pref); getFragmentManager() .beginTransaction() .replace(android.R.id.content,new PrefFragment()) .commit(); } public static class PrefFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref); } } }
他クラスでデータの読み込み
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); String uname = sp.getString("user_name", "");
xmlの属性
android:summary | 説明文 |
android:dialogTitle | ダイアログタイトル |
android:inputType | 入力形式(例:number) |
android:defaultValue | 初期値 |
そのほかのタグ
カテゴリ
PreferenceCategory タグで囲む。android:title属性にタイトル入力。チェックボックス
CheckBoxPreference。android:defaultValueを trueにすることでチェック済みに。
リストボックス
ListPreference
pref.xml内
android:entries | 選択肢として表示される文字列の配列。例:@array/list_entries |
android:entryValues | 選択肢を選んだとき保存される文字列の配列。例:@array/list_values |
strings.xml内の例
インテントの利用
変更時のリスナー設定
CheckBoxPreference cbp = (CheckBoxPreference)findPreference("user_check"); // キー名で取得 cbp.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String summary; if ((Boolean)newValue) { summary = "チェック済み"; } else { summary = "未チェック"; } preference.setSummary(summary); return true; // 更新の適用 } });