ארגון ההגדרות חלק מ-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
:
פעולות של העדפה.