Preferenceを使った設定画面の作成|Android開発
AndroidでPreference
を使って設定を保存する方法です。
PreferenceActivity
、PreferenceFragment
を使うことで簡単に設定画面を作成できます。
設定画面のレイアウト
画面レイアウトは不要です。代わりに設定項目の一覧を用意します。
res\xmlフォルダを作成し、任意のxmlファイルを用意します。下記サンプルではpref_main.xmlというファイルを用意しました。
PreferenceScreenのサンプル
res\xml\pref_main.xmlの内容です。
CheckBox(ON/OFF)とテキスト入力の項目を用意しています。
List表示の書き方
文字列リソース定義(strings.xml)
設定画面の記述
entryValues
にinteger-array
は設定できません。文字列配列(string-array
)のみ設定できます。Activity
PreferenceActivity
を継承したActivityを作成します。
今回はSettingsActivity
というクラス名にしました。
マニフェストファイル
AndroidManifest.xmlにSettingsActivity
を追加します。
PreferenceFragment
PreferenceFragment
を継承したクラスを上記Activityのインナークラスとして作成します。
サンプル
SharedPreferences
はPreferenceManager.getDefaultSharedPreferences(getActivity());
でも取得可能です。
setSummaries()
は現在の入力テキストをサマリとして表示する処理です。onResume()
でもコールしているのは画面起動時にサマリ表示するため。設定値が変わらないとonSharedPreferenceChanged()
が通知されないからです。

実行例
SettingsActivity
を起動すると下記の画面が表示されます。

テキスト入力の項目を開いた画面。

一度設定画面を閉じて再度開いても設定した値が保存されています。

ListPreferenceのサンプル

設定値の取得
Preference
で設定した値の取得方法です。
PreferenceManager.getDefaultSharedPreferences()
を使い、SharedPreferences
インスタンスを取得してから、get系のメソッドで値を取得します。
設定値の書き込み
Preference
で設定する項目をソースコードから直接設定する方法です。
SharedPreferences.Editor
クラスのput系メソッドで値を更新します。
保存方法は同期と非同期があります。
非同期書き込み
同期書き込み
設定値の取得と書き込みのサンプル
設定値を取得し、未設定ならデフォルト値を保存するサンプルです。
ListPreferenceの設定値を整数値として取得するサンプル
設定値は文字列で保存されています。なので設定値を取得後、Integer.parseInt()
で変換します。
ソースコード側でPreference Screenで定義した設定を非表示にする方法
PreferenceFragment.onViewCreated()
(上記サンプルではMainPreferenceFragment
のonViewCreated
)で次のようにします。pkey_hide
が非表示にしたい設定のキーです。