[Android] 設定画面を簡単に作る方法(ListPreference)

Androidには、設定画面を作成するライブラリ「AndroidX Preference Library」が用意されています。
このライブラリを使用し、設定画面を作成する手順は以下となります。

1. appレベルのbuild.gradleにライブラリを追加する
androidx.preference:preference を使うためにbuild.gradleのdependenciesに以下を追加します。

dependencies {
    implementation 'androidx.preference:preference:1.1.1'
}

2. 設定ページレイアウトを作成する
res/xml ディレクトリに 設定ページレイアウト(XML ファイル)を作成します。
この例では「preferences.xml」としています。
<PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <ListPreference
        app:key="list_setting"
        app:title="List Preference"
        />
</PreferenceScreen>

3. ListPrefrenceに設定値を追加する
ListPrefrenceできる値は、res/values/arrays.xmlに作成できます。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="settings_entries">
        <item>setting 1</item>
        <item>setting 2</item>
        <item>setting 3</item>
    </string-array>
    <string-array name="settings_values">
        <item>0</item>
        <item>1</item>
        <item>1</item>
    </string-array>
</resources>

4. 作成した値をListPrefrenceに反映する
以下のように参照を追加します。

<PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <ListPreference
        app:key="list_setting"
        app:title="List Preference"
        app:entries="@array/settings_entries"
        app:entryValues="@array/settings_values"
        />
</PreferenceScreen>

5. Summaryに設定値を表示されるようにする。
ListPreferenceの設定値を自動で表示するためのSimpleSummaryProviderが用意されています。
「app:useSimpleSummaryProvider="true"」をセットすれば使われるようになります。
この設定を入れると以下のようになります。

<PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <ListPreference
        app:key="list_setting"
        app:title="List Preference"
        app:entries="@array/settings_entries"
        app:entryValues="@array/settings_values"
        app:useSimpleSummaryProvider="true"
        />
</PreferenceScreen>

6. 設定ページ(Fragment)を作成する。
PreferenceFragmentCompatを継承したクラスを以下のように作成します。

package com.milktea.garakuta.testpreference;import android.os.Bundle;
import androidx.preference.PreferenceFragmentCompat;
public class SettingFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }
}
7.Activityに配置する。
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.content, new SettingFragment())
                .commit();
    }
}

0 件のコメント :

コメントを投稿