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を参考にさせていただきました。
ありがとう、ございました。
-
Android 設定画面を簡単に作成する (ANDROID HACKS) - グロブ
-
獅子の愚痴ブロ: MyButtonPreferenceソース
-
Android 奔走記: XML でカスタムView
xmlファイルに独自の属性を追加する際の、参考にさせていただきました。
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を参考にさせていただきました。
ありがとう、ございました。