設定画面で使用可能な6つのコンポーネント
Androidでは設定項目に使用可能なコンポーネントとして、以下が用意されています。
- CheckBoxPreference:チェックボックス設定
- RingtonePreference:リングトーンのための設定
- EditTextPreference:テキスト設定
- ListPreference:リスト設定
- PreferenceCategory:設定項目のカテゴリ
- PreferenceScreen:設定項目が設置可能な設定(入れ子用)
今回のサンプルは、上記をすべて使用しています。なお今回のサンプルは、Android SDKに付属するApiDemoを流用して改良しています。
XMLレイアウトによる設定画面の構築
以下は、今回のサンプルのXMLレイアウトです。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <RingtonePreference android:key="ringtone_preference" android:title="@string/ringtone_preference_title" android:summary="@string/ringtone_preference_summary" android:ringtoneType="ringtone" /> <PreferenceCategory android:title="@string/inline_preferences"> <CheckBoxPreference android:key="checkbox_preference" android:title="@string/checkbox_preference_title" android:summary="@string/checkbox_preference_summary" /> </PreferenceCategory> <PreferenceCategory android:title="@string/dialog_based_preferences"> <EditTextPreference android:key="edittext_preference" android:title="@string/edittext_preference_title" android:summary="@string/edittext_preference_summary" android:dialogTitle="@string/edittext_preference_dialog_title" /> <ListPreference android:key="list_preference" android:title="@string/list_preference_title" android:summary="@string/list_preference_summary" android:entries="@array/list_preference_entries" android:entryValues="@array/list_preference_values" android:dialogTitle="@string/list_preference_dialog_title" /> </PreferenceCategory> <PreferenceCategory android:title="@string/launch_preferences"> <PreferenceScreen android:key="screen_preference" android:title="@string/screen_preference_title" android:summary="@string/screen_preference_summary"> <CheckBoxPreference android:key="checkbox_preference2" android:title="@string/checkbox_preference_title" android:summary="@string/checkbox_preference_summary" /> <PreferenceScreen android:key="screen_preference2" android:title="@string/screen_preference_title" android:summary="@string/screen_preference_summary"> <CheckBoxPreference android:key="checkbox_preference3" android:title="@string/checkbox_preference_title" android:summary="@string/checkbox_preference_summary" /> </PreferenceScreen> </PreferenceScreen> <PreferenceScreen android:title="@string/intent_preference_title" android:summary="@string/intent_preference_summary"> <intent android:action="android.intent.action.VIEW" android:data="http://www.atmarkit.co.jp" /> </PreferenceScreen> </PreferenceCategory> <PreferenceCategory android:title="@string/preference_attributes"> <CheckBoxPreference android:key="parent_checkbox_preference" android:title="@string/parent_preference_title" android:summary="@string/parent_preference_summary" /> <CheckBoxPreference android:key="child_checkbox_preference" android:dependency="parent_checkbox_preference" android:layout="?android:attr/preferenceLayoutChild" android:title="@string/child_preference_title" android:summary="@string/child_preference_summary" /> </PreferenceCategory> </PreferenceScreen>
通常のActivityもそうですが、PreferenceActivityもきれいなXMLの入れ子構造です。
コラム 「画面をXMLで定義する意味」
AndroidはXMLとコードの両方でレイアウトを定義できますが、国際化や多くのデバイスへの対応が容易なのはXML、動的なレイアウトはコーディングという基準で使い分けるとよいと思います。
さて、Androidでは、レイアウトをXMLで定義するのはごく自然なこととして受け入れられていますが、ほかのプラットフォームではどうでしょうか。
- WPF(Windows Presentation Foundation)/Silverlight
C#などの言語で利用可能な技術で、Visual Studioでレイアウトした情報がXML形式のXAMLとして管理される形になる。Visual Studio 2010はそれ自身がWPFでレイアウトされている - Glade
GTKのためのユーザーインターフェイスデザイナ。実行時にGTKとは別途ライブラリが必要になる - Qt Designer
QtのためのGUIデザイナ。生成したレイアウトXMLをC++のコードに変換する方式を取る
XML以外の定義ファイルを用いてGUIをレイアウトするものは、上記以外にもたくさんあります(VC++、JavaFXなどなど)。筆者としては、「Androidほど自然にレイアウトをXMLで組み込んでいるプラットフォームは、ほかにない」と思っています。
以下は、上記XMLの実際の設定画面です。
以降では、ポイントを押さえながらソースコードを詳細に見ていきます。
Copyright © ITmedia, Inc. All Rights Reserved.