実際に画面を見ながらxmlを作成する
このSample06を起動し、ボタンを押すと、下の左画面ような設定画面が表示されます。
「Next Page」の部分をタップすると下の右画面に切り替わります。
このページでは、設定用パーツ間に依存関係を付けてあり、2つ目のEditTExtは、上にあるチェックボックスがオンのときにしか有効になりません。また、xmlファイル自体を以下に示します。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Sample06 Preference Activity">
<PreferenceCategory android:title="1st Category">
<CheckBoxPreference
android:summaryOn="CheckBox is on"
android:summaryOff="CheckBox is off"
android:title="CheckBoxPreference"
android:summary="Sample of Check Box"
android:defaultValue="true"
android:key="@string/prefs1CB">
</CheckBoxPreference>
<EditTextPreference
android:defaultValue="string value"
android:dialogMessage="This is demo EditTextPrefs"
android:key="@string/prefs1TE"
android:summary="Summary for EditText Demo"
android:dialogTitle="Dialog Title for EditTextDemo"
android:title="Title for EditText">
</EditTextPreference>
<ListPreference
android:entryValues="@array/EntryValue"
android:summary="This is Summary for ListPrefs"
android:entries="@array/Entry"
android:dialogTitle="ListPrefs Demo"
android:title="ListPrefs" android:key="@string/prefs1LP"
android:selectable="true" android:enabled="true"
android:positiveButtonText="OHK"
android:negativeButtonText="Kancel"
android:defaultValue="2nd">
</ListPreference>
<RingtonePreference
android:showSilent="true"
android:title="Title for RingTonePrefs"
android:ringtoneType="ringtone"
android:showDefault="true"
android:summary="Summary for RingTonePrefs"
android:key="@string/prefs1RT">
</RingtonePreference>
</PreferenceCategory>
<PreferenceCategory android:title="Preference with Layout">
<Preference
android:summary="Summary for Preference"
android:title="Title for Preference"
android:key="@string/prefs1PP"
android:layout="@layout/prefs_sample">
</Preference>
</PreferenceCategory>
<PreferenceCategory android:title="2nd Category">
<PreferenceScreen android:title="Next Page"
android:summary="Summary for PrefsScreen">
<PreferenceCategory android:title="Category2">
<CheckBoxPreference android:key="@string/prefs2CB"
android:title="Title for 2nd CheckBox"
android:summary="Summary for 2nd CheckBox"
android:summaryOn="2nd CheckBox is on"
android:summaryOff="2nd CheckBox is off"
android:disableDependentsState="false">
</CheckBoxPreference>
<EditTextPreference android:key="@string/prefs2ET"
android:dependency="@string/prefs2CB"
android:summary="Summary for 2nd EditText"
android:title="Title for 2nd EditText">
</EditTextPreference>
</PreferenceCategory>
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="3rd Category">
<CheckBoxPreference
android:title="Title for Category 3 CheckBox"
android:summary="Summary for CheckBox3"
android:key="@string/prefs3CB">
</CheckBoxPreference>
</PreferenceCategory>
</PreferenceScreen>
ここで、xmlを使って設定画面を構成する場合の注意をいくつか述べておきましょう。まず各設定パーツには、「key」というアトリビュートがあります。これは、パーツに対応する設定値をアクセスするときに使うキーです。このため、他のクラス内からアクセス可能なように文字列値として定義しておくと便利です。このとき、文字列値はstring.xmlではなく、ids.xml(IDを定義するファイル)で行なうようにします。
というのは、string.xmlは、多国語化するときに使われるため、画面上に表示されるようなメッセージ用としておき、このキーのように内部的に使われる文字列値は、IDとして管理しておくほうが便利なのです。
文字列値なので、ここでは名前とまったく同じものを値として定義しています。プレファレンスエディタでは「structure」タブで各パーツの名前としてこの「キー」が使われます。ここにids.xmlで定義した文字列値を使うということはリスト中での名前は、すべて「@string/xxxxx」という形式になります。xxxxxには、ids.xmlで定義した名前(Name)が使われるので、名前と値(Value)を一致させておいたほうが間違いが少なく、またデバッグ時に値を見るときに一致していたほうがわかりやすくなります。
もうひとつ、ListPreferenceをxmlで定義するとき、リストに項目として表示される文字列と、値となる文字列を配列として定義します。このとき、配列自体はarrays.xmlで定義できますが、表示に使う配列(Entry)に直接文字列を書き込んでしまうと、うまく動作しないことがあります。具体的にはスペースが入るとうまく動きません。この部分は国際化する可能性が高いため、表示する文字列は、strings.xmlで定義しておき、表示用配列の各要素は、文字列リソースを「@sting/yyyyy」という形で参照するようにします。このやり方だと、表示用文字列にスペースが入っていてもちゃんと表示されます。表示文字列をstring.xml側で定義しているので、国際語化したときにもarrays.xmlには手を加える必要がありません。
なお、このようにして作成したListPreferenceでは、表示用の選択肢には、Entriesで指定した文字列配列が使われ、値として保存されるのは、Entry valuesに指定された文字列配列の同じインデックス値を持つ要素が使われます。
この連載の記事
-
第11回
スマホ
アプリケーションをAndroidマーケットに登録する -
第10回
スマホ
ブロードキャストへの応答とタイマ割り込み -
第9回
スマホ
Androidアプリで複数の項目を表示するリストビューを使う -
第8回
スマホ
Androidアプリに必要なダイアログを作る -
第6回
スマホ
Androidアプリ内で表示されるメニューを作成する -
第5回
スマホ
インテントによるアプリケーションとアクティビティの呼出し -
第4回
スマホ
Androidアプリを構成する「アクティビティ」を実際に作る -
第3回
スマホ
アプリケーションの基本となる「アクティビティ」 -
第2回
スマホ
開発したアプリをエミュレーターやデバッガ上でテストする -
第1回
スマホ
Androidアプリの開発環境であるEclipseの使い方を知る - この連載の一覧へ