تنظيم الإعدادات جزء من 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>
تظهر النتيجة على النحو التالي:
تقسيم التسلسل الهرمي إلى شاشات متعددة
إذا كان لديك عدد كبير من عناصر Preference
أو فئات مختلفة، يمكنك
يمكنهم عرضها على شاشات منفصلة. كل شاشة عبارة عن
PreferenceFragmentCompat
بتدرّج هرمي منفصل خاص بها. Preference
عناصر
في الشاشة الأولية يمكنك الارتباط بعد ذلك بالشاشات الفرعية التي تحتوي على
والتفضيلات.
يوضح الشكل 2 تسلسلاً هرميًا بسيطًا يحتوي على فئتين: الرسائل المزامنة.
يوضح الشكل 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 نفسه باستخدام
لم يعُد <PreferenceScreen>
متاحًا. استخدام كائنات Fragment
المدمجة
بدلاً من ذلك.
استخدام أنشطة منفصلة
بدلاً من ذلك، إذا كنت بحاجة إلى تخصيص كل شاشة بشكل كبير، أو إذا كنت تريد عرض شاشة كاملة
Activity
انتقالات بين الشاشات، يمكنك استخدام Activity
منفصلة من أجل
كل PreferenceFragmentCompat
. وبإجراء ذلك، يمكنك تخصيص كل
Activity
وشاشة الإعدادات المقابلة له بالنسبة إلى معظم التطبيقات، لا
أوصيك بهذا؛ وبدلاً من ذلك، استخدِم Fragments
على النحو الموضّح سابقًا.
لمزيد من المعلومات حول تشغيل Activity
من Preference
، يمكنك الاطّلاع على
إجراءات الإعدادات المفضّلة