Ayarlarınızı düzenleyin Android Jetpack'in bir parçasıdır.

Büyük ve karmaşık ayar ekranları kullanıcının değiştirmek istediği belirli bir ayarı bulmasını zorlaştırabilir. Tercih kitaplığı, ayar ekranlarınızı daha iyi düzenlemeniz için aşağıdaki yolları sunar.

Tercih kategorileri

Tek bir ekranda birkaç ilgili Preference nesneniz varsa bunları bir PreferenceCategory kullanarak gruplandırabilirsiniz. PreferenceCategory, bir kategori başlığı görüntüler ve kategoriyi görsel olarak ayırır.

XML'de bir PreferenceCategory tanımlamak için Preference etiketlerini aşağıdaki gibi bir PreferenceCategory ile sarmalayın:

<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>

Sonuç aşağıdaki gibi görünür:

Kategorilerin yer aldığı tercihleri gösteren resim
Şekil 1. Kategoriler içindeki tercihler.

Hiyerarşinizi birden fazla ekrana bölme

Çok sayıda Preference nesneniz veya farklı kategoriniz varsa bunları ayrı ekranlarda görüntüleyebilirsiniz. Her ekran, kendi ayrı hiyerarşisine sahip bir PreferenceFragmentCompat öğesidir. Ardından, ilk ekranınızdaki Preference nesneleri ilgili tercihleri içeren alt ekranlara bağlanabilir.

Şekil 2'de, iki kategori içeren basit bir hiyerarşi gösterilmektedir: Mesajlar ve Senkronizasyon.

Hiyerarşileri olan bir tercih ekranını gösteren resim
Şekil 2. İki kategori içeren basit bir hiyerarşi.

Şekil 3'te, aynı tercih grubu birden çok ekrana bölünmüş olarak gösterilmektedir:

Birden fazla ekrana bölünmüş bir hiyerarşiyi gösteren resim
Şekil 3. Birden fazla ekrana bölünmüş bir hiyerarşi.

Ekranları bir Preference ile bağlamak için XML biçiminde bir app:fragment beyan edebilir veya Preference.setFragment() kullanabilirsiniz. Preference öğesine dokunulduğunda aşağıdaki örnekte gösterildiği gibi PreferenceFragmentCompat öğesinin tam paket adını başlatın:

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

Kullanıcı, ilişkilendirilmiş Fragment öğesine sahip bir Preference öğesine dokunduğunda arayüz yöntemi PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment() çağrılır. Bu yöntemde, yeni ekranı görüntüleyebilirsiniz ve ekranın etrafındaki Activity alanın içinde uygulanır.

Tipik bir uygulama süreci aşağıdaki gibidir:

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 (Tercih Ekranları)

İç içe yerleştirilmiş bir &lt;PreferenceScreen&gt; kullanarak aynı XML kaynağında iç içe yerleştirilmiş hiyerarşilerin bildirilmesi artık desteklenmiyor. Bunun yerine iç içe yerleştirilmiş Fragment nesneleri kullanın.

Ayrı Etkinlikler kullanma

Alternatif olarak, her bir ekranı yoğun bir şekilde özelleştirmeniz gerekiyorsa veya ekranlar arasında tam Activity geçişi yapmak istiyorsanız her PreferenceFragmentCompat için ayrı bir Activity kullanabilirsiniz. Bu şekilde her bir Activity öğesini ve ilgili ayarlar ekranını tamamen özelleştirebilirsiniz. Çoğu uygulama için bunu yapmanız önerilmez. Bunun yerine, daha önce açıklandığı gibi Fragments kullanın.

Preference cihazından Activity başlatma hakkında daha fazla bilgi için Tercih işlemleri bölümüne bakın.