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

Büyük ve karmaşık ayar ekranları, kullanıcının istedikleri belirli bir ayar var. Tercih kitaplığında, daha iyi düzenlemek için aşağıdaki adımları uygulayabilirsiniz.

Tercih kategorileri

Birbiriyle ilgili birden fazla Tek bir öğede Preference nesne kolayca bulabilirseniz, Sauce and Spoon'un PreferenceCategory. CEVAP PreferenceCategory, bir kategori başlığı görüntüler ve seçin.

XML'de PreferenceCategory tanımlamak için Preference etiketlerini PreferenceCategory, şöyle:

<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ç şuna benzer:

Kategorilerle ilgili tercihleri gösteren resim
Şekil 1. Kategorilerdeki tercihler.

Hiyerarşinizi birden çok ekrana bölme

Çok sayıda Preference nesneniz veya farklı kategoriniz varsa ayrı ekranlarda görüntüleyebilirsiniz. Her ekran bir Kendi ayrı hiyerarşisinde PreferenceFragmentCompat. Preference nesne ardından, alakalı reklam öğelerini içeren alt ekranlara tercihler.

Şekil 2'de şu iki kategoriden oluşan basit bir hiyerarşi gösterilmektedir: Mesajlar ve Senkronizasyon.

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

Şekil 3'te, aynı tercihler birden çok ekrana bölünmüş olarak gösterilmiştir:

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

Ekranları Preference ile bağlamak için XML olarak app:fragment veya dönüşüm hunisinin üst kısmındaki Preference.setFragment(). Şu durumda PreferenceFragmentCompat öğesinin tam paket adını başlat: aşağıdaki örnekte gösterildiği gibi Preference öğesine dokunulur:

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

Kullanıcı, ilişkili bir Fragment bulunan Preference öğesine dokunduğunda arayüz yöntem PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment() çağrılır. Bu yöntem, yeni ekranı görüntüleyeceğiniz ve ekran, etrafındaki Activity çevresine uygulanmıştır.

Tipik bir uygulama aşağıdakine benzer:

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

Tercih Ekranları

İç içe yerleştirilmiş bir XML kaynağı kullanarak iç içe yerleştirilmiş hiyerarşileri bildirme &lt;PreferenceScreen&gt; artık desteklenmiyor. İç içe yerleştirilmiş Fragment nesnelerini kullanın .

Ayrı Etkinlikler kullan

Alternatif olarak, her bir ekranı yoğun bir şekilde özelleştirmeniz gerekiyorsa veya Ekranlar arasında Activity geçişleri olduğundan her ekran için ayrı bir Activity kullanabilirsiniz her PreferenceFragmentCompat. Bu şekilde her bir öğeyi Activity ve ilgili ayarlar ekranı. Çoğu uygulamada bunu önerdi; bunun yerine, daha önce açıklandığı gibi Fragments kullanın.

Preference cihazından Activity başlatma hakkında daha fazla bilgi için bkz. Tercih işlemleri.