<HOME

PreferenceActivityを使用して設定画面を表示する30分


PreferenceActivityを使用して設定画面を作る方法について学習します。

  1. 「PreferenceActivityTraining」アプリを作成します。

    1. Android Studioを起動し、新規プロジェクトを作成します。

      「Welcome to Android Studio」画面の場合は、「Start a new Android Studio project」をクリックします。

      別のプロジェクトが開いている場合は、ツールバーから「File」→「New」→「New Project...」をクリックします。

    2. HelloWorldの時と同じようにプロジェクトを作成していきます。

      アプリ名は「PreferenceActivityTraining」としてください。

      今回は「Backwards Compatibility (AppCompat)」のチェックは外しておきます。

  2. Androidでは、自分で設定画面用のレイアウトリソースを作らなくても、PreferenceScreenのリソースを利用することで、Androidらしい設定画面を簡単に作れます。


    設定画面に表示するリソースを作成します。

    1. PreferenceScreen用のxmlリソースを追加します。

      ファイル名は「preferences.xml」とします。

    2. 「preferences.xml」を以下のように変更します。

      併せて、文字列リソースと配列リソースも追加します。

      res/xml/preferences.xml

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : res/values/strings.xml

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : res/values/arrays.xml

      コードを表示するにはJavaScriptを有効にしてください

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        設定画面のリソースとして、ルート要素にPreferenceScreenを指定しています。

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        PreferenceScrenn内に「○○Preference」要素を記述していくことで、設定項目を追加していきます。


        「EditTextPreference」は、設定項目選択時にEditTextを表示し、入力されたテキストを保持するPreferenceです。


        値が変更されたとき、「android:key」に指定されたキーに対して、値を保存/更新します。

        設定画面上に表示する設定項目名は、「android:title」で指定します。

        項目名の下にサマリを表示したい場合は、「android:summary」で指定します。

        設定画面生成時に初期値を与えたい場合は「android:defaultValue」で指定します。

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        「ListPreference」は、設定項目選択時にリストを表示し、選択されたアイテムを保持するPreferenceです。


        「android:entries」で、リストに表示するテキストの配列を指定します。

        「android:entryValues」で、実際に保存する値の配列を指定します。

        (entriesの方は言語等の条件により値が変わってしまうので、entryValuesで別名管理することになります)

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        「SwitchPreference」は、設定項目にスイッチを表示し、選択でON/OFFを切り替えるPreferenceです。

        値はbooleanで、trueまたはfalseとなります。

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        「PreferenceCategory」は、複数の設定項目をグループ化して分類するために使用します。


        Preferenceと同様に、コード等から参照するための識別子として「android:key」を指定します。

        設定画面上に表示する分類名は「android:title」で指定します。

        「android:enabled」で、グループ内の設定項目に対してまとめて有効/無効を切り替えることができます。

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        「MultiSelectListPreference」は、設定項目選択時にリストを表示し、選択されたアイテムを保持するPreferenceです。

        ListPreferenceは1つのアイテムのみを保持するのに対し、MultiSelectListPreferenceは複数のアイテムを保持できます。

  3. ソースコードを編集します。

    1. 設定画面用のActivityクラスを作成します。

      クラス名は「PreferenceActivityEx」とします。


      設定画面用のActivityクラスは「PreferenceActivity」クラスを継承し、

      「addPreferencesFromResource」メソッドを使用して、PreferenceScreenのxmlリソースをActivityに追加します。

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : PreferenceActivityEx.java

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : AndroidManifest.xml

      コードを表示するにはJavaScriptを有効にしてください

    2. その他、必要な処理を追加していきましょう。

      サンプル : PreferenceActivityEx.java

      コードを表示するにはJavaScriptを有効にしてください

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        Preferenceを参照するためのキーを定数として定義しておきます。

        キーに指定する文字列は、リソース側で設定した値と同一になるようにします。

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        キーを指定して「findPreference」メソッドをコールし、リソースで定義したPreferenceを取得しています。


        「text」キーの設定項目のサマリに、現在の値を表示したいので、

        Preference変更時のコールバックメソッド「onPreferenceChange」のリスナを登録しています。

        「onPreferenceChange」メソッド内で、更新後の値をサマリにセットしています。


        「onPreferenceChange」はPreferenceの変更時に呼ばれるものなので、

        最初の設定画面表示時にも、サマリに現在の値をセットするようにしています。

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        SwitchPreferenceのON/OFFに応じて、PreferenceCategoryの有効/無効を切り替えています。


        SwitchPreference「enable_other_settings」の「onPreferenceChange」で、
        更新後の値に応じてPreferenceCategory「other_settings」の有効/無効を切り替えます。


        最初の設定画面表示時にも、PreferenceCategory「other_settings」の有効/無効に
        SwitchPreference「enable_other_settings」のON/OFFを反映します。

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        他のActivity等から簡単に設定値を呼び出せるように、publicメソッドを用意しています。

        Activityインスタンスを介して直接処理のやり取りをするのは好ましくないので、

        インスタンスメソッドではなくクラスメソッド(staticメソッド)としています。

        アプリ内で設定値を各クラスから参照するには、Singletonを利用する方法などもあります。

        アプリの実装に応じて、適切な方法を選択するようにしてください。

        PreferenceScreenによってアプリのデフォルトSharedPreferencesに値が保存されるので、

        SharedPreferencesの項で学習したように、

        PreferenceManagerを介して取得したSharedPreferencesインスタンスから値を読み込んで、返却しています。

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        ListPreferenceで保存した「画面の色」(文字列)を取得し、対応する色の数値を返却しています。

      • 以下の記述について説明します。

        コードを表示するにはJavaScriptを有効にしてください

        「その他の設定を有効にする」が有効であればMultiSelectListPreferenceで保存した値(複数)を取得し、

        その中に指定した値(apple)が含まれているか否かを返却しています。

    3. MainActivityに、設定値に応じて表示を変更する処理を実装します。

      サンプル : MainActivity.java

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : res/layout/activity_main.xml

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : res/menu/options.xml

      コードを表示するにはJavaScriptを有効にしてください

  4. アプリを起動して、動作を確認してみましょう。

PreferenceActivityに関する詳細については公式ドキュメントに記載されています。

また、Androidは先人たちがネット上にたくさんの情報を残してくれています。

これらも活用して、是非このAPIを有効に使えるようになってください。