-------------------
AndroidX で Preference のライブラリもアップデートされました。この Preference ライブラリを使うと、Material Design に沿った設定画面を簡単に作ることができます。
API Level 1 からある android.preference.PreferenceActivity は今では使用しません。 また、API Level 11 で追加された android.preference.PreferenceFragment は API level 28 で deprecated になっています。
設定
androidx.preference release note最新のバージョンは 1.1.0-alpha04、stable のバージョンは 1.0.0 です。
- dependencies {
- ...
- // stable は 1.0.0
- implementation "androidx.preference:preference:1.1.0-alpha04"
- }
基本的な使い方
androidx.preference.PreferenceFragmentCompat を使います。preference 階層を設定する方法として次の3つの方法があります。
- XML で指定する
- Activity の meta-data として XML を指定する
- PreferenceScreen オブジェクトを指定する
- class SettingFragment : PreferenceFragmentCompat() {
- override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
- setPreferencesFromResource(R.xml.pref, rootKey)
- }
- }
Summary 機能
1.1.0-alpha01 で Summary に関係する機能が入りました。app:useSimpleSummaryProvider
ListPreference と EditTextPreference で app:useSimpleSummaryProvider という属性を指定できるようになりました。
この属性に true を指定すると、preference の値が変わったときにその値(ListPreference の場合は対応する android:entries または android:entryValues の値)が Summary に表示されます。値が保存されていないときは "Not Set" と表示されます。
- <EditTextPreference
- ...
- app:useSimpleSummaryProvider="true" />
- <ListPreference
- ...
- app:useSimpleSummaryProvider="true" />
SummaryProvider
SummaryProvider を使うと、任意の Preference で値が変わったときに Summary を更新できます。
app:useSimpleSummaryProvider="true" を指定した ListPreference では ListPreference.SimpleSummaryProvider が、EditTextPreference では EditTextPreference.SimpleSummaryProvider が SummaryProvider として利用されます。
CheckBoxPreference に SummaryProvider をセットすると、チェックの状態の応じて Summary が変わるようにすることができます。
- findPreference("check").setSummaryProvider {
- if ((it as CheckBoxPreference).isChecked) "する!" else "しない..."
- }
- with(findPreference("check") as CheckBoxPreference) {
- summary = if (isEnabled) "する!" else "しない..."
- setOnPreferenceChangeListener { preference, newValue ->
- preference.summary = if ((newValue as Boolean)) "する!" else "しない..."
- true
- }
- }
0 件のコメント:
コメントを投稿