XMLレイアウトでAndroidアプリに“設定画面”を追加Androidで動く携帯Javaアプリ作成入門(19)(2/3 ページ)

» 2010年08月19日 00時00分 公開
[緒方聡,株式会社イーフロー]

設定画面で使用可能な6つのコンポーネント

 Androidでは設定項目に使用可能なコンポーネントとして、以下が用意されています。

  1. CheckBoxPreference:チェックボックス設定
  2. RingtonePreference:リングトーンのための設定
  3. EditTextPreference:テキスト設定
  4. ListPreference:リスト設定
  5. PreferenceCategory:設定項目のカテゴリ
  6. 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の実際の設定画面です。

図2 新しく盛り込まれた、ヒントを教えてくれるウィジェット 図2 新しく盛り込まれた、ヒントを教えてくれるウィジェット

 以降では、ポイントを押さえながらソースコードを詳細に見ていきます。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。