必ず必要なアプリケーションの設定画面
Androidは、設定画面と設定値を簡単に扱うための仕組みを用意しています。ちょっと複雑なアプリケーションになれば、動作を変えるような設定項目が必要になります。このときに必要になるのは、実際に設定を行なう「画面」と、設定値を管理する機能です。多くのアプリケーションに必要になる機能でありながら、たとえばWindowsなどではレジストリへのアクセス機能が用意されているのみで、設定画面などは、ほとんどゼロから開発者が作らねばなりません。
Androidでは、設定用画面を作るためにPreferenceオブジェクトやPreferenceManager、PreferenceActivityクラスが用意されています。簡単にいうと、設定用の画面をxmlで作ってPreferenceActivityとして設定画面を作ると、ここに対してユーザーが行なった操作は、自動的にPreferenceオブジェクトに保存されます。設定値はAndroidのファイルシステム中にXMLファイルとして保存されます。
このとき、アプリケーションのパッケージ名を自動で使うため、開発者は、設定値がどのような形で保存されているのかなどは考える必要はありません。PreferenceManagerは、このPreferenceオブジェクトを扱うためのクラスで、これを使うことでアプリケーション内のJavaクラスで設定値へのアクセスが可能になるほか、設定画面を持たない設定値(アプリケーションの状態)などを保存させることができます。
設定画面で利用できる7つのパーツ
設定画面は、簡単なものなら、xmlファイルを作るだけで利用可能です。設定画面(PreferenceActivity)のxmlファイルは、プレファレンス画面エディタで作ることができ、直接xmlファイルを書く必要はありません。
アプリケーション開発では、複雑な設定画面を作る必要が出てくる場合もあります。ですが多くの設定項目は単純で、真偽値(オンかオフか)や文字列、数値などです。通常は複雑であっても、これらの組合せで設定値を構成することが可能です。ただ、場合によっては、GUIを生かした設定画面を作りたいこともあるでしょう。このような場合には、通常のアクティビティのようにレイアウトファイルを作り、これを設定画面から呼び出すようにします。
設定画面用のxmlファイルを作るには、resフォルダの下にxmlフォルダを作り(ファイルメニュー→「新規」→「フォルダ」)、そこにAndroid xmlファイルを作ります(「ファイルメニュー」→「新規」→「Android xml file」)。
このプレファレンス画面エディタで、プレファレンス画面を構成する「部品」として使えるのは、以下の7つパーツです。
チェックボックス(CheckBoxPreference)
テキスト入力(EditTextPreference)
リスト(ListPreference)
リングトーン(RingtonePreference)
プレファレンス(Preference)
プレファレンスカテゴリ(PreferenceCategory)
プレファレンススクリーン(PreferenceScreen)
このうち、「Preference」は、レイアウトファイルを指定して、カスタムの設定パーツを作る場合に利用します。ただし、この場合、レイアウトファイル内で指定されたandroid.widgetsから値を取得して保存するコードを書く必要があります。
また1つの設定画面(Activity)は、1つの「PreferenceScreen」に相当しますが、PreferenceScreenを入れ子にすることで、別の設定画面を定義することもできます。「PreferenceCategory」は、パーツをグループ化するときに使います。
また、コードから利用するときには、上記のパーツ(実体はクラスです)に加え、ベースになるクラスとして以下のものが使えます。
DialogPreference
PrefarenceGroup
DialogPreferenceは、ListPreferenceやEditTextPreferenceなど、ダイアログボックスを開く設定パーツの親となるクラスです。ここから子クラスを作ることで、専用のダイアログボックスを開く設定用パーツを作ることが可能です。また、PrefarenceGroupは、PreferenceScreenやPreferenceCategoryの親となるクラスです。
どのようなことができるかを見るために作ったのが今回作成したSample06です。WorldClockの場合については後で解説しますが、このSample06は、xmlファイルで表現できるものを示すために作成したものです。以下のリンクからプロジェクトファイルをダウンロードできます。動作するプログラムはAndroidマーケットにアップロードしてあります。

この連載の記事
-
第11回
スマホ
アプリケーションをAndroidマーケットに登録する -
第10回
スマホ
ブロードキャストへの応答とタイマ割り込み -
第9回
スマホ
Androidアプリで複数の項目を表示するリストビューを使う -
第8回
スマホ
Androidアプリに必要なダイアログを作る -
第6回
スマホ
Androidアプリ内で表示されるメニューを作成する -
第5回
スマホ
インテントによるアプリケーションとアクティビティの呼出し -
第4回
スマホ
Androidアプリを構成する「アクティビティ」を実際に作る -
第3回
スマホ
アプリケーションの基本となる「アクティビティ」 -
第2回
スマホ
開発したアプリをエミュレーターやデバッガ上でテストする -
第1回
スマホ
Androidアプリの開発環境であるEclipseの使い方を知る - この連載の一覧へ