PreferenceFragmentCompatという設定画面作成用のコンポーネントを試してみました。
まずはbuild.gradleでライブラリを追加します。
implementation 'androidx.preference:preference:1.2.0'
次は設定画面用のXMLを作成します。
res/xmlにpreferences.xmlというファイルを作成して下のようにします。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="設定1"> <CheckBoxPreference android:key="notifications" android:title="通知を有効にする" android:defaultValue="true" /> </PreferenceCategory> </PreferenceScreen>
次は下のように設定画面用のFragmentを作成します。
class MySettingFragment: PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) } }
これでアプリを起動すると下のように設定画面が表示されます。
ここでチェックのON/OFF切り替えをするとSharedPreferencesにデータが保存されます。
保存されたデータは下のように取得する事ができます。
プロパティーの名前はxmlのandroid:key
で指定したものになります。
val preferences = PreferenceManager.getDefaultSharedPreferences(this) val value = preferences?.getBoolean("notifications", false)
設定はチェックボックス以外にも文字入力・リストなど様々なものがあります。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="設定1"> <SwitchPreferenceCompat android:key="dark_mode" android:title="ダークモード" android:summary="ダークモードを有効にする" android:defaultValue="false" /> <EditTextPreference android:key="username" android:title="ユーザー名" android:dialogTitle="ユーザー名を入力してください" android:summary="ユーザー名はアプリ内で表示されます" android:defaultValue="user123" /> <ListPreference android:key="language" android:title="Language" android:summary="Select your preferred language" android:entries="@array/entries" android:entryValues="@array/values" /> </PreferenceCategory> </PreferenceScreen>
ListPreferenceで使う配列はres/arrays.xmlなどで下のように定義する必要があります。
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="entries"> <item>entry 1</item> <item>entry 2</item> <item>entry 3</item> </string-array> <string-array name="values"> <item>0</item> <item>1</item> <item>1</item> </string-array> </resources>
リストは下のようにアラート上で選択します。