Mengatur setelan Anda Bagian dari Android Jetpack.

Layar setelan yang besar dan kompleks dapat menyulitkan pengguna untuk menemukan setelan tertentu yang ingin diubah. Library Preference menawarkan cara berikut untuk mengatur layar setelan dengan lebih baik.

Kategori Preference

Jika memiliki beberapa objek Preference yang terkait di satu layar, Anda dapat mengelompokkannya menggunakan PreferenceCategory. PreferenceCategory menampilkan judul kategori dan memisahkan kategori secara visual.

Untuk menentukan PreferenceCategory dalam XML, gabungkan tag Preference dengan PreferenceCategory, seperti 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 menunjukkan preferensi dengan kategori
Gambar 1. Preferensi dalam kategori.

Membagi hierarki menjadi beberapa layar

Jika memiliki banyak objek Preference atau kategori yang berbeda, Anda dapat menampilkannya di layar terpisah. Setiap layar adalah PreferenceFragmentCompat dengan hierarki terpisahnya sendiri. Objek Preference di layar awal Anda kemudian dapat ditautkan ke sublayar yang berisi preferensi terkait.

Gambar 2 menunjukkan hierarki sederhana yang berisi dua kategori: Messages dan Sync.

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

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

Gambar yang menunjukkan hierarki yang dibagi menjadi beberapa layar
Gambar 3. Hierarki dibagi menjadi beberapa layar.

Untuk menautkan layar dengan Preference, Anda dapat mendeklarasikan app:fragment dalam XML atau menggunakan Preference.setFragment(). Luncurkan nama paket lengkap PreferenceFragmentCompat saat Preference diketuk, seperti 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 yang melingkupinya.

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 &lt;PreferenceScreen&gt; bertingkat tidak lagi didukung. Sebagai gantinya, gunakan objek Fragment bertingkat.

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, kami tidak merekomendasikannya; sebagai gantinya, gunakan Fragments seperti yang dijelaskan sebelumnya.

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