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