تنظيم الإعدادات جزء من 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، يمكنك الاطّلاع على إجراءات الإعدادات المفضّلة