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」をクリックします(下図)。
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 に保存されます。