Mengatur setelan Anda Bagian dari Android Jetpack.

Layar setelan yang besar dan kompleks dapat menyulitkan pengguna untuk menemukan pengaturan spesifik yang ingin mereka ubah. Pustaka Preference menawarkan cara berikut untuk mengatur layar setelan dengan lebih baik.

Kategori Preference

Jika Anda memiliki beberapa Objek Preference pada satu objek Anda dapat mengelompokkannya menggunakan PreferenceCategory. J PreferenceCategory menampilkan judul kategori dan memisahkan secara visual kategori.

Untuk menentukan PreferenceCategory dalam XML, gabungkan tag Preference dengan PreferenceCategory, sebagai berikut:

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

    <PreferenceCategory
        app:key="notifications_category"
        app:title="Notifications">

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

    </PreferenceCategory>

    <PreferenceCategory
        app:key="help_category"
        app:title="Help">

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

    </PreferenceCategory>

</PreferenceScreen>

Hasilnya akan terlihat seperti berikut:

Gambar yang menampilkan preferensi dengan kategori
Gambar 1. Preferensi dalam kategori.

Membagi hierarki menjadi beberapa layar

Jika Anda memiliki banyak objek Preference atau kategori yang berbeda, Anda dapat menampilkannya di layar terpisah. Setiap layar adalah PreferenceFragmentCompat dengan hierarkinya sendiri yang terpisah. Preference objek di layar awal, Anda dapat menautkan ke sublayar yang berisi preferensi Anda.

Gambar 2 menunjukkan hierarki sederhana yang berisi dua kategori: Pesan dan Sinkronisasi.

Gambar yang menampilkan layar preferensi dengan hierarki
Gambar 2. Hierarki sederhana dengan dua kategori.

Gambar 3 menunjukkan kumpulan preferensi yang sama yang dibagi menjadi beberapa layar:

Gambar yang menampilkan pemisahan hierarki menjadi beberapa layar
Gambar 3. Hierarki dibagi menjadi beberapa layar.

Untuk menautkan layar dengan Preference, Anda dapat mendeklarasikan app:fragment dalam XML atau Anda bisa menggunakan Preference.setFragment() Luncurkan nama paket lengkap PreferenceFragmentCompat saat Preference diketuk, seperti yang ditunjukkan dalam contoh berikut:

<Preference
        app:fragment="com.example.SyncFragment"
        .../>

Saat pengguna mengetuk Preference dengan Fragment yang terkait, metode antarmuka PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment() akan dipanggil. Metode ini adalah tempat Anda menangani penayangan layar baru dan tempat layar diimplementasikan di Activity sekitar.

Implementasi standar terlihat seperti berikut ini:

Kotlin

class MyActivity : AppCompatActivity(),
    PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
    ...
    override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {
        // Instantiate the new Fragment.
        val args = pref.extras
        val fragment = supportFragmentManager.fragmentFactory.instantiate(
                classLoader,
                pref.fragment)
        fragment.arguments = args
        fragment.setTargetFragment(caller, 0)
        // Replace the existing Fragment with the new Fragment.
        supportFragmentManager.beginTransaction()
                .replace(R.id.settings_container, fragment)
                .addToBackStack(null)
                .commit()
        return true
    }
}

Java

public class MyActivity extends AppCompatActivity implements
        PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
    ...
    @Override
    public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
        // Instantiate the new Fragment.
        final Bundle args = pref.getExtras();
        final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate(
                getClassLoader(),
                pref.getFragment());
        fragment.setArguments(args);
        fragment.setTargetFragment(caller, 0);
        // Replace the existing Fragment with the new Fragment.
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.settings_container, fragment)
                .addToBackStack(null)
                .commit();
        return true;
    }
}

PreferenceScreens

Mendeklarasikan hierarki bertingkat dalam resource XML yang sama menggunakan elemen &lt;PreferenceScreen&gt; tidak lagi didukung. Menggunakan objek Fragment bertingkat sebagai gantinya.

Menggunakan Activities terpisah

Jika perlu melakukan banyak penyesuaian di setiap layar, atau jika ingin transisi Activity penuh antar-layar, Anda dapat menggunakan Activity terpisah untuk setiap PreferenceFragmentCompat. Dengan begitu, Anda dapat sepenuhnya menyesuaikan setiap Activity dan layar setelannya yang sesuai. Untuk sebagian besar aplikasi, kita tidak merekomendasikan hal ini; sebagai gantinya, gunakan Fragments seperti yang dijelaskan sebelumnya.

Untuk informasi selengkapnya tentang meluncurkan Activity dari Preference, lihat Tindakan preferensi.