[Android] 設定画面の作り方

Android API Level 11 以降、設定画面の作成には「PreferenceActivity」ではなく「PreferenceFragment」というものを使います。

作り方としては、

  • 設定項目を記述したXMLファイルを作成する
  • 通常の Activity を継承して Activity クラスを作成する
  • 上記 Activity クラスの中に、PreferenceFragment を継承したクラスを static なクラスとして定義する

といった感じになります。
以下に順番に詳細を説明します。作業環境は ADT Bundle です。

設定項目を記述したXMLファイルを作成する

新規の「Android XML File」を作成します。
Resource Type を「Preference」、Root Element を「PreferenceScreen」にして、ファイル名は適当に付けて「Finish」をクリックします(下図)。

Preference ファイルの作成

XML ファイルの編集画面で、設定項目を追加していきます(下図)。

設定項目の追加

上図では「Structure」タブで作業しています。

通常の Activity を継承して Activity クラスを作成する

新規の Android Activity を作成します。ここで、「Settings Activity」ではなく、「Blank Activity」として作成する点に注意してください。

作成すると、以下のようなコードが自動的に生成されます。

public class MyPrefsActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_prefs);
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.my_prefs, menu);
    return true;
  }

}

PreferenceFragment クラスを内包させる

上記で作成した Activity クラス内に、public static なクラスとして PreferenceFragment を継承したクラスを内包させます。また、onCreate() メソッド内で、setContentView() の呼び出し行を削除し、代わりに FragmentManager というものを使用してその PreferenceFragment を読み込むコードを追加します(下図)。

public class MyPrefsActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction()
        .replace(android.R.id.content, new MyPrefsFragment()).commit();
  }

  ... 省略 ...

  public static class MyPrefsFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      addPreferencesFromResource(R.xml.myprefs);
    }
  }

}

これで設定画面の出来上がりです(下図)。

設定画面

PreferenceFragment 上に作られる設定項目は、SharedPreferences に保存されます。


Pocket
Bookmark this on Yahoo Bookmark

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>