Preference(1)-GUI画面を操作して設定データを保存する画面を作る。
Androidには、Preference(プリファレンス)と呼ばれるアプリケーションの設定データを扱うための機能が、あらかじめ組み込まれている。
アプリケーションの設定データは、Windowアプリケーションではiniファイルが、javaアプリケーションではプロパティファイルが従来から使われているが、 最近のアプリケーションでは、どのプラットフォームでもxmlファイルが使われる傾向にある。
Androidもxml形式で設定データを保存する。
このPreferenceの機能を使って、以下の事が実現できる。
- GUI画面を操作して、データを設定する。
androidでは、設定データを操作する標準のGUI部品が用意されており、 これを使う事で、異なるアプリケーションでも同じような操作画面を使って、設定データをGUIで変更できる画面を、簡単につくる事ができる。 - 設定画面からではなく、プログラムから設定データを操作する。
まずは、簡単なサンプルから
まずは、設定画面より入力された文字列を設定ファイルに保存して表示する、簡単なアプリケーションを作ってみる。
eclipseに新しいandroidプロジェクトを作成。
ここでは、プロジェクト名として「PreferenceSample1」を,パッケージ名に「gudon.sample.preference1」を, アプティビティに「PreferenceSample1Activity」を指定した。
設定画面を表示するには、設定画面専用のアクティビティであるPreferenceActivityを継承したクラスを使う。
このPreferenceActivityクラスに、設定画面の部品(設定画面専用のウィジェットのようなもの)を配置する。
設定画面の部品は、Preferenceクラスを継承したクラスを使う。
設定画面にPreference部品を配置するには、プログラムで記述する事もできるが、 通常は、xmlファイル(Activityのレイアウトファイルmain.xmlのようなもの)に記述する。
Preference部品を配置するレイアウトファイルの作成
パッケージエクスプローラにて、プロジェクトのresフォルダを選択し、マウスの右ボタンクリックにて表示されるメニューより、 「新規」→「その他」で表示される「新規」ダイアログボックスにて、androidフォルダの下に表示されるAndroid xmlファイルを選択し、 「次へ」ボタンを押下する。
以下のようなダイアログボックスが表示される。
xmlファイルのファイル名を入力し、オプションボタンのPreferenceを選択、完了ボタンを押下する。
以下のように「Android xml リソース・エディタ」が表示される。
PrefarenceScreenを選択して、追加ボタンを押下する。
下図のようにPrefarenceScreenに追加するPrefarenceの候補(設定画面の部品の候補)が表示されるので、 ここでは「EditTextPreference」を選択し、OKボタンを押下する。
「Android xml リソース・エディタ」のPrefarenceScreenの下にEditTextPreferenceが追加されるので、 それを選択し右側の「Attributes from Prefarence」を展開する。
下図のように値を設定。
ここでは、下記の項目を設定した。
- key
設定データの項目にアクセスするためのキー - Title
画面に表示される設定データのタイトル - Summary
画面に表示される設定データのの説明
これらの内容はレイアウトファイルmain.xmlと同様に、テキストでも編集可能である。
最終的にmy_preference.xmlを以下のように修正。
リスト1(1)-Preference部品のレイアウトファイル(my_preference.xml)
PreferenceActivityクラスの作成
PreferenceActivityを継承した以下のような、設定画面を表示するためのクラスを追加する。
リスト1(2)-設定画面表示用のActivity(MyPreferenceActivity.java)
PreferenceActivityに、Preference部品のレイアウトファイルを指定するには、 12行目のようにaddPreferencesFromResourceメソッドを実行するだけでよい。
設定画面を呼び出すActivityクラスのコード
設定画面は通常、メインアクティビティからMENUを使って呼び出され、 設定画面から戻ってきた時に、その設定データの値がメインアクティビティ画面に反映されるような、使われ方が多いと思う。
この操作を実現するために、プロジェクトを作成する時に作成されたActivityクラスを以下のように修正する。
リスト1(3)-メインアクティビティ(PreferenceSample1Activity.java)
onCreateOptionsMenuメソッドでオプションメニューを作成して、 onOptionsItemSelectedメソッドにてメニューが選択された時に設定画面に画面遷移をおこない、 戻ってきた時にonActivityResultメソッドにて設定データの変更を画面に再表示している。
メニューについては『バラエティに富んだメニューを(1) - 「オプションメニュー」と「コンテキストメニュー」を』を, 画面遷移の方法については『画面遷移』を, 参照していただきたい。
19行目のreadPreferencesメソッドは、設定データを取得して表示するためのメソッドである。
設定データを操作するには、PreferenceManagerクラスよりSharedPreferencesオブジェクトを取得して(22,23行目)、 このオブジェクトを使ってアクセスをおこなう。
ここでは、getStringメソッドを使用して入力された文字列を取得している(24行目)。
Preferences部品によって取得するデータの型が異なるので、その型に応じたgetXXXメソッドが用意されている。
SharedPreferencesについては、「Preference(5)-SharedPreferencesオブジェクトを使ってPreferenceデータにアクセス」の記事を参照。
マニュフェストファイルを修正
設定画面表示用に新たにPreferenceActivityを追加したので、このActivityをマニュフェストファイルに登録する必要がある。(15行目を追加)
リスト1(4)-マニュフェストファイル(AndroidManifest.xml)
プログラムの動作
このプログラムを実行して、MENUキーを押下すると「設定」メニュ-が表示される。
「設定」メニュ-を選択すると、設定画面が表示される。
設定項目を選択すると、EditTextを含んだダイアログが表示される。
EditTextに文字を入力して、OKボタンを押下するとダイアログが閉じる。
戻るボタンを押下すると、最初の画面に戻り、設定データのedKeyに保存された値がTextViewに表示される事になる。
入力された設定データが保存されている、xmlファイルの内容を確認してみよう。
設定データは「/data/data/プロジェクトを作成する際に指定したパッケージ名/shared_prefs/」デレクトリ配下に、 「プロジェクトを作成する際に指定したパッケージ名_references.xml」というファイル名で保存されている。
この様子は、DDMパースペクティブのファイルエクスプローラにて確認する事ができる。
このファイルを、エミュレータよりWindowsのファイルシステムにコピーして,内容を表示してみると、以下のように正しく値が保存されているのが確認できる。 (ファイルのコピー方法は「SQLiteでデータベースのWindowsからSQLite」を参照)
リスト2-設定データアファイルの内容(gudon.sample.preference1_preferences.xml)