Register now for Android Dev Summit 2019!

Mengatur setelan Anda   Part of Android Jetpack.

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

Kategori preferensi

Jika Anda memiliki beberapa Preferences terkait pada satu layar, Anda dapat mengelompokkannya dengan PreferenceCategory. PreferenceCategory Menampilkan judul kategori dan memisahkan kategori secara visual.

Untuk menentukan PreferenceCategory dalam XML, bungkus tag Preference dengan PreferenceCategory, seperti yang ditunjukkan di bawah:

<androidx.preference.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>

</androidx.preference.PreferenceScreen>
Gambar 1. Preferensi dengan kategori.

Bagi hierarki Anda menjadi beberapa layar

Jika Anda memiliki banyak Preferences atau kategori berbeda, Anda dapat menampilkannya di layar terpisah. Setiap layar harus berupa PreferenceFragmentCompat dengan hierarki tersendiri. Preferences pada layar awal Anda selanjutnya dapat ditautkan ke sublayar yang berisi Preferences terkait.

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

Gambar 2. Hierarki sederhana dengan dua kategori.

Gambar 3 memperlihatkan set Preferences yang sama pada beberapa layar:

Gambar 3. Hierarki dibagi menjadi beberapa layar.

Untuk menautkan layar dengan Preference, Anda dapat mendeklarasikan app:fragment di XML, atau Anda dapat menggunakan Preference.setFragment(). Tetapkan nama paket lengkap PreferenceFragmentCompat yang harus diluncurkan ketika Preference diketuk, seperti yang ditunjukkan di bawah ini:

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

Ketika pengguna mengetuk Preference dengan Fragment terkait, metode antarmuka PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment() dipanggil. Anda bisa menggunakan metode ini untuk menangani tampilan layar baru dan harus diimplementasikan di Activity sekitar.

Implementasi umumnya terlihat mirip seperti berikut:

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,
                args)
        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(),
                args);
        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 <PreferenceScreen> bertingkat tidak didukung lagi. Anda harus menggunakan objek Fragment bertingkat sebagai gantinya.

Menggunakan Aktivitas terpisah

Sebagai alternatif, jika Anda perlu menyesuaikan setiap layar, atau jika Anda menginginkan transisi Activity penuh antar layar, Anda dapat menggunakan Activity terpisah untuk setiap PreferenceFragmentCompat. Dengan melakukan ini, Anda dapat sepenuhnya menyesuaikan setiap Activity dan layar setelan yang terkait. Untuk sebagian besar aplikasi, opsi tidak disarankan, dan Anda harus menggunakan Fragments seperti yang dijelaskan sebelumnya.

Untuk informasi selengkapnya tentang membuka Activities dari Preference, lihat Tindakan preferensi.