Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

設定   Part of Android Jetpack.

さまざまな設定によりユーザーは、アプリケーションの機能や動作を変更することができます。 設定は、アプリケーションがクラウドとデータを同期する頻度などのバックグラウンドの動作に影響することがあります。また、コンテンツの変更やユーザー インターフェースの表示など、さらに広い範囲に影響する場合もあります。

ユーザーが設定可能な設定値をアプリケーションに組み込むための推奨される方法は、AndroidX Preference Library を使用することです。 ユーザー インターフェースの管理やストレージとのやり取りはこのライブラリで実行されるため、開発者がすることはユーザーが設定できる個々の設定値を定義するだけです。 ライブラリにはマテリアル テーマが付属しており、複数の端末や OS バージョンの間で一貫したユーザー エクスペリエンスが提供されます。

スタートガイド

Preference は、Preference Library の基本的なビルディング ブロックとなるものです。 設定画面には、Preference hierarchy(階層)が含まれます。 この階層は、XML リソースとして定義するか、または コード中に階層をビルドする ことができます。

以下のセクションでは、AndroidX Preference Library を使用してシンプルな設定画面をビルドする方法について説明します。

階層を作成する

次の例は、XML により定義されるシンプルな階層を示しています。

<androidx.preference.PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <SwitchPreferenceCompat
        app:key="notifications"
        app:title="Enable message notifications"/>

    <Preference
        app:key="feedback"
        app:title="Send feedback"
        app:summary="Report technical issues or suggest new features"/>

</androidx.preference.PreferenceScreen>

この階層には、2 つの別個の Preferences が含まれています。1 つはユーザーが設定のオンとオフを切り替えることかできる SwitchPreferenceCompat、もう 1 つはウィジェットなしの基本的な Preference です。

階層をビルドする際、各 Preference のキーは固有でなければなりません。

階層をインフレートする

XML 属性から階層をインフレートするには、次の例に示されているように、PreferenceFragmentCompat を作成し、onCreatePreferences() をオーバーライドし、インフレートする XML リソースを提供します。

Kotlin

class MySettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
        setPreferencesFromResource(R.xml.preferences, rootKey)
    }
}

Java

public class MySettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }
}

その後、他の Fragment の場合と同じようにして、この FragmentActivity に追加することができます。

Kotlin

class MySettingsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager
                .beginTransaction()
                .replace(R.id.settings_container, MySettingsFragment())
                .commit()
    }
}

Java

public class MySettingsActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.settings_container, new MySettingsFragment())
                .commit();
    }
}