تنظيم الإعدادات جزء من Android Jetpack.

يمكن أن تجعل شاشات الإعدادات الكبيرة والمعقدة من الصعب على المستخدم العثور على إعداد معين يريد تغييره. تقدم مكتبة التفضيلات الطرق التالية لتنظيم شاشات الإعدادات بشكل أفضل.

فئات التفضيل

إذا كان لديك العديد من عناصر Preference ذات الصلة على شاشة واحدة، يمكنك تجميعها باستخدام PreferenceCategory. يعرض العنصر PreferenceCategory عنوان الفئة ويفصل بينها مرئيًا.

لتحديد PreferenceCategory في ملف XML، عليك إحاطة علامات Preference بالرمز PreferenceCategory على النحو التالي:

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

تظهر النتيجة على النحو التالي:

صورة تعرض الإعدادات المفضّلة مع فئات
الشكل 1. التفضيلات ضمن الفئات.

تقسيم العرض الهرمي إلى شاشات متعدّدة

إذا كان لديك عدد كبير من عناصر Preference أو فئات مختلفة، يمكنك عرضها على شاشات منفصلة. وكل شاشة هي عبارة عن "PreferenceFragmentCompat" لها تسلسل هرمي منفصل لها. يمكن لكائنات Preference الموجودة على شاشتك الأولية الارتباط بعد ذلك بالشاشات الفرعية التي تحتوي على تفضيلات ذات صلة.

ويوضح الشكل 2 تدرجًا هرميًا بسيطًا يحتوي على فئتين: الرسائل والمزامنة.

صورة تعرض شاشة الإعدادات المفضّلة مع تدرّجات هرمية
الشكل 2. تسلسل هرمي بسيط من فئتين.

يوضح الشكل 3 مجموعة التفضيلات نفسها مقسّمة إلى شاشات متعددة:

صورة تعرض تدرجًا هرميًا ينقسم إلى شاشات متعددة
الشكل 3. تسلسل هرمي مقسم إلى شاشات متعددة.

لربط الشاشات باستخدام Preference، يمكنك تعريف app:fragment بتنسيق XML أو يمكنك استخدام Preference.setFragment(). شغِّل اسم الحزمة الكامل لـ PreferenceFragmentCompat عند النقر على Preference، كما هو موضّح في المثال التالي:

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

عندما ينقر المستخدِم على Preference مع Fragment مرتبط، يتم استدعاء طريقة الواجهة PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment(). وهذه الطريقة هي المكان الذي يمكنك فيه عرض الشاشة الجديدة ومكان عرض الشاشة في Activity المحيطة.

ويبدو التنفيذ النموذجي مشابهًا لما يلي:

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

الشاشات المفضّلة

لم يعُد بالإمكان عرض التسلسلات الهرمية المدمَجة ضمن مورد XML نفسه باستخدام سمة &lt;PreferenceScreen&gt; مدمجة. استخدِم كائنات Fragment المدمجة بدلاً من ذلك.

استخدام أنشطة منفصلة

وإذا كنت بحاجة إلى إجراء تخصيص كبير على كل شاشة أو إذا أردت إجراء عمليات انتقال Activity كاملة بين الشاشات، يمكنك استخدام عنصر Activity منفصل لكل PreferenceFragmentCompat. من خلال إجراء ذلك، يمكنك تخصيص كل Activity وشاشة الإعدادات المقابلة له بشكل كامل. بالنسبة إلى معظم التطبيقات، لا ننصح باستخدام ذلك، بدلاً من ذلك، استخدِم Fragments كما هو موضّح سابقًا.

لمزيد من المعلومات حول تشغيل Activity من Preference، يمكنك الاطّلاع على الإجراءات المفضّلة.