Preference(4)-Preferenceのカスタマイズ


Preferenceクラスをカスタマイズ

Preferenceクラスを継承して、独自のPreference部品をつくることもできるようなので、挑戦してみた。

作成したPreferenceは、下図のようにListPreferenceを横に表示させたような感じで、 ラジオボタンを3つ表示して、その中からどれか1つを選択するという、あまり実用性のないものですが...。

 

 

この「三択Preference」に表示するラジオボタンのテキストを指定するために、 leftText,centerText,rightText属性というxml属性をattrs.xmlに定義する。

リスト11(1)-カスタムPreferenceためのに独自の属性を定義(attrs.xml)

「三択Preference」に、ウィジェットを配置するためのレイアウトを定義。

リスト11(2)-「三択Preference」のViewのレイアウトファイル(custom_prefernce.xml)

Preferenceクラスを継承した「三択Preference」クラスを記述する。

リスト11(3)-「三択Preference」クラスのソースコード(MyCustomPreference.java)

「三択Preference」は、defaultValueに指定された値の先頭の文字を判別して、 「l」の時に左側(left)のラジオボタンが、「c」,「r」の時にそれぞれ中央(center),右(right) がデフォルトの選択状態となる。

このためのコードが、onBindViewメソッドに記述されています。

また、コードでもleftText,centerText,rightText属性が操作できるように、 それぞれのセッターとゲッタメソッドを定義している。

onPreferenceChangeイベントに応答するためは、86行目のように設定データを保存する直前にcallChangeListenerメソッドを呼び出して、 その戻り値がtrueの場合のみデータを保存するようにする。

 

PreferenceActivityに「三択Preference」を配置するための、xmlファイルを記述。

リスト11(4)-xmlファイルに独自のPreferenceを配置(my_preference.xml)

「三択Preference」は以下のように、PreferenceActivityにxmlファイルを使わずに、コードを使って配置することもできる。

リスト11(5)-PreferenceActivityに「三択Preference」をコードを使って配置(MyPreferenceActivity.java)

参考URL

この記事は、以下のURLを参考にさせていただきました。

ありがとう、ございました。

DialogPreferenceクラスをカスタマイズ

抽象クラスであるDialogPreferenceクラスを継承すると、 EditTextPreferenceのようにダイアログボックスを表示するPreference部品を、 つくることもできる。

ここでは、DialogPreferenceクラスを継承して、以下の図のようなDialogにDatePickerとTimePickerを配置した、 日付と時間を指定する「日付・時間Preference」をつくる事にする。

 

 

「日付・時間Preference」のViewのレイアウトファイルに、DatePickerとTimePickerウィジェットを配置する。

リスト12(1)-「日付・時間」PreferenceのViewのレイアウトファイル(custom_dialog_preference.xml)

DialogPreferenceクラスを継承して「日付・時間Preference」のクラスを作成する。

リスト12(2)-「日付・時間Preference」クラスのソースコード(MyDialogPreference.java)

PreferenceActivityに「日付・時間Preference」を配置するためのxmlファイルを記述。

リスト12(3)-xmlファイルに「日付・時間Preference」を配置(my_preference.xml)

defaultValueを指定する場合は上記のように、「yyyy/MM/dd HH:mm」形式で指定する事になる。

参考URL

この記事は、以下のURLを参考にさせていただきました。

ありがとう、ございました。

PreferenceActivityをカスタマイズ

PreferenceActivityは、ListActivityを継承しているので、ListActivityと同様の手法で画面の表示を変更できる。

これを利用して、一つの画面に通常のウィジェット(Viewクラスを継承したオブジェクト)の表示と、 Preference(Preferenceクラスを継承したオブジェクト)の表示を、同時におこなう事ができる。

以下の例では、画面上部にリスト11で作成した「三択Preference」を2つ含んだPreferenceを、 画面下部にはLinerLayoutとButtonのウィジェットを表示している。

 

 

このプログラムでは、画面上部の「三択Preference」の上下,左右のラジオボタンの選択に応じて、下部のLinerLayoutのGravityの値を変化させて ボタンの表示位置を変更させている。

また、リスト10ではPreferenceのIntent機能を使って地図画面に画面繊維をさせる例を示したが、 ここでは、同様の機能をボタンのOnCliskイベントを使って実現させている。

以下に、プログラムを示す。

PreferenceActivityのウィジェットのレイアウトファイルに、 Preference表示用のListViewの他にLinearLayout,Buttonウィジェットを配置。

リスト13(1)-PreferenceActivityのウィジェットのレイアウトファイル(preference_activity_layout.xml)

Preferenceのxmlファイルに、「三択reference」を2つ配置。

リスト13(2)-Preferenceを配置するxmlファイル(my_preference.xml)

PreferenceActivityに、以下のコードを記述する。

リスト13(3)-Activityのソースコード(MyPreferenceActivity.java)

PreferenceActivityのコードでは、レイアウトファイルを適用し、 Preferenceが変更されたときのイベントや、ボタンが押されたときのイベントの処理を記述。

Preferenceデータの値により、LinearLayoutのGravityの値を変更して、ボタンの表示位置を移動させている。

 

「三択reference」のコードについてはリスト11を参照して下さい。

参考URL

この記事は、以下のURLを参考にさせていただきました。

ありがとう、ございました。

 

ページのトップへ戻る