設定画面を作る (1/6)
作成:2010-11-06 14:35
更新:2010-11-06 14:35
更新:2010-11-06 14:35
■設定画面とPreferenceActivity
Androidアプリを作成するとき、さまざまな初期設定などの情報を保存しておきたいことがあります。ファイルやデータベースなどに保存して読み込んでもいいのですが、正直、面倒ですね。またデータの保存だけならまだしも、設定などを行うためのレイアウトまで作るとなると一仕事になります。もっと簡単に設定などの情報を保管する方法が必要です。
この種の設定情報を管理するために、Androidには「PreferenceActivity」というクラスが用意されています。これは文字通り、アクティビティのクラスです。つまり、通常のアプリのアクティビティなどと同様に、あらかじめレイアウトを用意しておいてそれを画面に表示し、操作する働きを持ちます。
このPreferenceActivityは、通常のアクティビティと異なり、設定を管理するための機能をいろいろと持っています。ざっと整理するとこのようなものです。
1.設定画面用のレイアウト
Androidでは、設定画面のためのレイアウトを作成することができます。これは通常のレイアウトで使われているのとは違う、専用のタグを書いて記述します。PreferenceActivityでは、このファイルをロードして画面を表示させることができます。
2.設定の編集画面と値の保存
設定用のレイアウトでは、項目をタッチすると自動的に値を入力するための編集用ダイアログが現れます。そして値を入力してOKすると、自動的にその設定内容が保存されます。この「編集画面の作成と表示」「値の保存」はすべてAndroidが自動で行ってくれるため、プログラマは全く何も操作する必要がありません。
3.値の操作
設定用のレイアウトに用意されるコンポーネント類は、通常のアクティビティのコンポーネントと同様、メソッドを使って取得することができます。そして、取得したコンポーネントを利用し、値を取り出したり変更したりできます。もちろんこの際も、値を変更すれば自動的にそれが保存されるため、設定の保存などの処理をプログラマが用意する必要はありません。
――このように、PreferenceActivityでは設定の編集や保存などに関する機能が一通り備わっているので、プログラマはほとんど何もコードを書く必要がありません。ただレイアウトのXMLファイルを用意し、PreferenceActivityクラスでそのXMLをロードする処理を用意するだけでいいのです。
ただし、通常のアクティビティ側に、少しだけ処理が必要となります。PreferenceActivityはアクティビティのサブクラスですから、設定を行う際、用意したPreferenceActivityを起動するやり方を理解しておかなければいけません。また設定完了後に何かをした場合には、PreferenceActivity終了後の処理をどう実装すればいいかもかんがえておく必要があるでしょう。
では、実際に簡単なサンプルを作成してみましょう。ここでは「MySampleApp」アプリに簡単な設定画面を実装してみます。まず、AndroidManifest.xmlを修正しておく必要があります。下のコード欄に簡単なサンプルをあげておきます。ここでは、jp.tuyano.sampleパッケージに、MySampleというアクティビティを用意して実行するという形で作成をしてあります。
ここでは、<application>タグ内に、もう1つの<activity>タグが追加してあります。以下の部分ですね。
続いて、メインのレイアウトファイルmain.xmlも用意しておきましょう。イカのコード欄に掲載したように、1つだけTextViewを用意しておくことにしました。これは、後で設定内容などを表示するのに使います(あくまでサンプルとして使うだけなので、設定を行うのにこれが必須という意味ではありません)。
以上で、下準備は完了です。後は、アクティビティとPreferenceActivityを作成していくだけです。
この種の設定情報を管理するために、Androidには「PreferenceActivity」というクラスが用意されています。これは文字通り、アクティビティのクラスです。つまり、通常のアプリのアクティビティなどと同様に、あらかじめレイアウトを用意しておいてそれを画面に表示し、操作する働きを持ちます。
このPreferenceActivityは、通常のアクティビティと異なり、設定を管理するための機能をいろいろと持っています。ざっと整理するとこのようなものです。
1.設定画面用のレイアウト
Androidでは、設定画面のためのレイアウトを作成することができます。これは通常のレイアウトで使われているのとは違う、専用のタグを書いて記述します。PreferenceActivityでは、このファイルをロードして画面を表示させることができます。
2.設定の編集画面と値の保存
設定用のレイアウトでは、項目をタッチすると自動的に値を入力するための編集用ダイアログが現れます。そして値を入力してOKすると、自動的にその設定内容が保存されます。この「編集画面の作成と表示」「値の保存」はすべてAndroidが自動で行ってくれるため、プログラマは全く何も操作する必要がありません。
3.値の操作
設定用のレイアウトに用意されるコンポーネント類は、通常のアクティビティのコンポーネントと同様、メソッドを使って取得することができます。そして、取得したコンポーネントを利用し、値を取り出したり変更したりできます。もちろんこの際も、値を変更すれば自動的にそれが保存されるため、設定の保存などの処理をプログラマが用意する必要はありません。
――このように、PreferenceActivityでは設定の編集や保存などに関する機能が一通り備わっているので、プログラマはほとんど何もコードを書く必要がありません。ただレイアウトのXMLファイルを用意し、PreferenceActivityクラスでそのXMLをロードする処理を用意するだけでいいのです。
ただし、通常のアクティビティ側に、少しだけ処理が必要となります。PreferenceActivityはアクティビティのサブクラスですから、設定を行う際、用意したPreferenceActivityを起動するやり方を理解しておかなければいけません。また設定完了後に何かをした場合には、PreferenceActivity終了後の処理をどう実装すればいいかもかんがえておく必要があるでしょう。
AndroidManifest.xmlの用意
では、実際に簡単なサンプルを作成してみましょう。ここでは「MySampleApp」アプリに簡単な設定画面を実装してみます。まず、AndroidManifest.xmlを修正しておく必要があります。下のコード欄に簡単なサンプルをあげておきます。ここでは、jp.tuyano.sampleパッケージに、MySampleというアクティビティを用意して実行するという形で作成をしてあります。
ここでは、<application>タグ内に、もう1つの<activity>タグが追加してあります。以下の部分ですね。
<activityここでは「MySamplePrefActivity」という名前のクラスとしてアクティビティを追加してあります。このように、PreferenceActivityを利用する場合には、そのための<activity>タグを用意しておく必要があります。
android:name=".MySamplePrefActivity"
android:label="pref">
</activity>
main.xmlの用意
続いて、メインのレイアウトファイルmain.xmlも用意しておきましょう。イカのコード欄に掲載したように、1つだけTextViewを用意しておくことにしました。これは、後で設定内容などを表示するのに使います(あくまでサンプルとして使うだけなので、設定を行うのにこれが必須という意味ではありません)。
以上で、下準備は完了です。後は、アクティビティとPreferenceActivityを作成していくだけです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.tuyano.sample" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:debuggable="true" android:label="@string/app_name"> <activity android:name=".MySample" 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=".MySamplePrefActivity" android:label="pref"> </activity> </application> <uses-sdk android:minSdkVersion="4" /> </manifest> ※main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" xmlns:app="http://schemas.android.com/apk/res/jp.tuyano.sample" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/TextView01" android:text="OK" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="12pt" /> </LinearLayout>
※関連コンテンツ