設定画面で使用可能な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.
