色設定プリファレンス
設定アクティビティを作成する方法を解説します。
本項では、色を設定するプリファレンスを作成します。
解説
前項に対する処理の変更は以下です。
- 「色を設定する設定項目」の設定色を変更する色設定ダイアログのレイアウトを作成します。
- 「色を設定する設定項目」のプリファレンスクラスを作成します。
- 「色を設定する設定項目」の設定色を変更する色設定ダイアログの処理を担うダイアログフラグメントクラスを作成します。
- 設定フラグメントクラスに、色設定ダイアログを表示する処理を追加します。
- プリファレンスファイルに、「色を設定する設定項目」を追加します。
- メインアクティビティに「色を設定する設定項目」の設定値を表示する処理を追加します。
実装
アプリの仕様
- アプリを起動すると、メインアクティビティが表示される。
- オプションメニューの「Settings」を選択すると、設定アクティビティに移行する。
- 設定アクティビティには、自前の設定項目が表示される。
- メインアクティビティには、自前の設定項目の設定値が表示される。
- 設定アクティビティの「テキストを指定する設定項目」「リストから1つの項目を選択する設定項目」「リストから複数の項目を選択する設定項目」の右側に設定値が表示される。
- 設定アクティビティには、「色を設定する設定項目」が表示される。(本項で追加)
- 「色を設定する設定項目」をタップすると色設定ダイアログが表示され、設定色を変更することができる。(本項で追加)
- メインアクティビティには、「色を設定する設定項目」の設定値が表示される。(本項で追加)
プロジェクトを開く
「設定アクティビティに設定値の表示」で作成したプロジェクトを開きます。
色設定ダイアログレイアウトの作成
色設定を行う際に使用する色設定ダイアログのレイアウトを作成します。
「Project」ペインの「app > res > layout」を右クリックします。
右クリックメニュー「New > Layout Resource File」を選択します。
File name欄に「dialog_colorpreference」と入力します。
「OK」ボタンを押します。
dialog_colorpreference.xml が作成されます。
レイアウト内容を、色を表示するImageView、RGB値を表示する3つのTextView、RGB値を設定する3つのSeekBar、などを配置したレイアウトにします。
dialog_colorpreferencet.xml の内容を以下のようにします。
色設定プリファレンスクラスの作成
色設定プリファレンスクラスを作成します。
「Project」ペインの「app > java > ドメイン.パッケージ名」を右クリックします。
右クリックメニュー「New > Java Class」を選択します。
クラス名欄に「ColorPreference」と入力しエンターキーを押します。
続いて表示されるダイアログは、内容変更せず、「OK」ボタンを押します。
「ColorPreference」クラスができました。
「ColorPreference」クラスファイルの内容を以下のようにします。
色設定プリファレンスダイアログフラグメントクラスの作成
色設定プリファレンスの色設定ダイアログのためのダイアログフラグメントクラスを作成します。
「Project」ペインの「app > java > ドメイン.パッケージ名」を右クリックします。
右クリックメニュー「New > Java Class」を選択します。
クラス名欄に「ColorPreferenceDialogFragmentCompat」と入力しエンターキーを押します。
続いて表示されるダイアログは、内容変更せず、「OK」ボタンを押します。
「ColorPreferenceDialogFragmentCompat」クラスができました。
「ColorPreferenceDialogFragmentCompat」クラスファイルの内容を以下のようにします。
設定フラグメントクラスの編集
設定フラグメントクラスに、色設定ダイアログを表示する処理を追加します。
設定アクティビティクラス「MySettingsActivity」の内部に定義された設定フラグメントクラス「SettingsFragment」の末尾に、onDisplayPreferenceDialog関数を追加します。
- 色設定ダイアログを表示しようとしているかをチェックする処理を追加します。
- ColorPreferenceDialogFragmentCompat のインスタンスを生成し、表示する処理を追加します。
- 親クラスのonDisplayPreferenceDialog関数を呼び出す処理を追加します。
「MySettingsActivity」クラスファイルの内容を以下のようにします。
プリファレンスファイルの編集
プリファレンスファイル「root_preferences.xml」に、色を設定する設定項目を追加します。
プリファレンスファイル「root_preferences.xml」の内容を以下のようにします。
メインアクティビティクラスの編集
メインアクティビティの設定値を表示するための処理に、色の設定値を表示する処理を追加します。
「MainActivity」クラスの onResume関数を変更します。
- 色の設定値を読み込む処理を追加します。
- 表示する文字列に、色の設定値を追加します。
「MainActivity」クラスの内容を以下のようにします。
「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
リビルドし、エラー、警告がないことを確認します。
実行
Android端末にて、動作確認。
アプリを起動すると、メインアクティビティが表示されます。
メインアクティビティには、設定項目の設定値が表示されます。
色を設定する設定項目の設定値も表示されます。
右上のオプションメニューの「Settings」を選択すると、「設定アクティビティ」に移行します。
色を設定する設定項目を選択すると、色設定ダイアログが表示されます。
色設定ダイアログのスライダーを調整し色の設定を変更します。
設定を変更し、メインアクティビティに戻ると、変更した設定値が画面に表示されます。
設定アクティビティで変更した設定は、アプリを終了しても、次回アプリを起動した際には、設定内容が復元されます。
関連ページ
- 設定アクティビティの作成
- 設定アクティビティのカスタマイズ
- 設定アクティビティに設定値の表示 - 前項
- 色設定プリファレンス - 本項
- 設定アクティビティに設定色の表示 - 次項
参考WEBサイト
- Android の PreferenceDialog のカスタマイズに苦戦した話… | PisukeCode - Web開発まとめ
- android - Difference between DialogPreference before and after AndroidX - Stack Overflow
- How do I create custom preferences using android.support.v7.preference library? - Stack Overflow