Androidアプリ入門 No.43 PreferencesActivityの基本
PreferencesActivity
PreferencesActivityの基本
AndroidのOS自体の設定画面のようなものは、ある一定以上のアプリケーションの場合には必要になることが多い。自分で同様の画面を作成しようとすると多少大変であるが、AndroidではPreferencesActivityというものがあり、簡単に設定画面を作成することができる。
設定画面を最初に作成する。設定画面を作成するには、res/xml/preferences.xmlファイルを用意し、以下のようにする。
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:key="check" android:title="チェックボックス" android:summary="チェックすると状態が変わります" /> </PreferenceScreen>
Preference共通の属性値として以下の3つがある。
属性 | 内容 |
---|---|
key | 設定のキー。設定ファイルに保存される際にこのキーで保管される。 |
title | 画面に表示するタイトル。 |
summary | 画面に表示する概要。 |
次に、このxmlファイルを元にして設定画面を作成する。sample.at.ConfActivity.javaファイルを以下のように作成する。重要なのは、PreferenceActivityクラスを継承し、addPreferencesFromResourceで、上記のpreferences.xmlファイルを読み込む。
package sample.at; import android.os.Bundle; import android.preference.PreferenceActivity; public class ConfActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } }
次に、このActivityを呼び出すためのMainActivityを用意する。まずは、main.xml。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button" android:text="設定" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
MainActivity.javaは以下のようになる。MainActivityでは、「設定」ボタンを押されたときに、ConfActivityが開くようになっている。Intentというものを使用しているが詳しくは後述する。
package sample.at; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(getApplicationContext(), ConfActivity.class)); } }); } }
ここまでで、設定画面が呼び出せそうだが呼び出せない。Activityはmanifestファイルに定義されたものしか呼び出せないようになっている。そこで、AndroidManifest.xmlファイルを以下のように定義する。追加したのは、ConfActivityの部分だけである。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="sample.at" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ConfActivity" android:label="設定"> </activity> </application> <uses-sdk android:minSdkVersion="4" /> </manifest>
設定画面では、チェックボックスが表示される。このチェックボックスは特に保存等の処理を実装しなくても、状態の変更がされた段階でデータが保管される。
実際に、エミュレーターのFile Explorerから/data/data/sample.at/shared_prefs/sample.at_preferences.xmlを確認すると、以下のように設定が保管されているのが確認できる。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <boolean name="check" value="false" /> </map>