לפתיחת ההגדרות חלק מ-Android Jetpack.
ההגדרות מאפשרות למשתמשים לשנות את הפונקציונליות וההתנהגות של אפליקציות. ההגדרות יכולות להשפיע על ההתנהגות ברקע, כמו התדירות שבה האפליקציה מסנכרנת נתונים עם בענן, או שהם יכולים להיות רחבים יותר, כמו שינוי התוכן תצוגה של ממשק המשתמש.
כדי לשלב באפליקציה שלך הגדרות שהמשתמש יכול לקבוע, צריך להשתמש ב-AndroidX ספריית ההעדפות. הספרייה הזו מנהלת את ממשק המשתמש ומקיימת אינטראקציה עם באחסון כדי לקבוע רק את ההגדרות הנפרדות שהמשתמש יכול להגדיר. הספרייה כוללת עיצוב Material Design לספק חוויית משתמש עקבית בכל המכשירים ובגרסאות של מערכות ההפעלה.
שנתחיל?
Preference
הוא הבניין הבסיסי
של ספריית ההעדפות. מסך הגדרות מכיל Preference
היררכיה. תוכלו להגדיר את ההיררכיה הזו כמשאב XML, או שתוכלו ליצור
היררכיה בקוד.
בקטעים הבאים מוסבר איך לבנות מסך הגדרות פשוט באמצעות ספריית ההעדפות של AndroidX.
לפני שמתחילים, צריך להוסיף את התלות של ספריית ההעדפות ל-build.gradle
file:
מגניב
dependencies { implementation "androidx.preference:preference-ktx:1.2.0" }
Kotlin
dependencies { implementation("androidx.preference:preference-ktx:1.2.0") }
אחרי Gradle Sync, אפשר לעבור לחלק ה-XML של המשימה.
יצירת היררכיה
בפרויקט, עוברים לתיקייה res/xml
, יוצרים קובץ preferences.xml
ומוסיפים אליה את הקוד הבא:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> <Preference app:key="feedback" app:title="Send feedback" app:summary="Report technical issues or suggest new features"/> </PreferenceScreen>
ההיררכיה הזו מכילה שני אובייקטים מסוג Preference
:
SwitchPreferenceCompat
שמאפשר למשתמשים להפעיל ולהשבית הגדרה, וPreference
בסיסי ללא
לווידג'ט הזה.
כשיוצרים היררכיה, לכל Preference
חייב להיות מפתח ייחודי.
ניפוח ההיררכיה
כדי להגדיל היררכיה ממאפיין XML, צור
PreferenceFragmentCompat
לשנות
onCreatePreferences()
,
ומספקים את משאב ה-XML שמתנפח, כמו בדוגמה הבאה:
Kotlin
class MySettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) } }
Java
public class MySettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); } }
לאחר מכן אפשר להוסיף את Fragment
אל Activity
כמו שמוסיפים לכל מכשיר אחר
Fragment
:
Kotlin
class MySettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) supportFragmentManager .beginTransaction() .replace(R.id.settings_container, MySettingsFragment()) .commit() } }
Java
public class MySettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager() .beginTransaction() .replace(R.id.settings_container, new MySettingsFragment()) .commit(); } }
התוצאה מוצגת בתמונה הבאה:
מעקב אחרי ההעדפות
אפשר לקבל אירוע כשהעדפה משתנה על ידי רישום האזנה ל זה:
Kotlin
findPreference<SwitchPreferenceCompat>("notifications") ?.setOnPreferenceChangeListener { _, newValue -> Log.d("Preferences", "Notifications enabled: $newValue") true // Return true if the event is handled. } findPreference<Preference>("feedback") ?.setOnPreferenceClickListener { Log.d("Preferences", "Feedback was clicked") true // Return true if the click is handled. }
Java
SwitchPreferenceCompat notificationsPref = findPreference("notifications"); if (notificationsPref != null) { notificationsPref.setOnPreferenceChangeListener((preference, newValue) -> { Log.d("Preferences", String.format("Notifications enabled: %s", newValue)); return true; // Return true if the event is handled. }); } Preference feedbackPref = findPreference("feedback"); if (feedbackPref != null) { feedbackPref.setOnPreferenceClickListener((preference) -> { Log.d("Preferences", "Feedback was clicked"); return true; // Return true if the event is handled. }); }
קריאה של הערך הנוכחי של ההעדפה
PreferenceFragmentCompat
מסתירה חלק גדול מהמכונות שנדרשות כדי לשמור
קריאת ההעדפות. עם זאת, הכול נשמר באמצעות
SharedPreferences
, וניתן לקרוא את הערכים האלה כרגיל עם
SharedPreferences
:
Kotlin
val preferences = PreferenceManager.getDefaultSharedPreferences(this).all preferences.forEach { Log.d("Preferences", "${it.key} -> ${it.value}") }
Java
var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll(); preferences.forEach((key, value) ->{ Log.d("Preferences", String.format("%s -> %s", key, value)); });
קטע הקוד הקודם מקבל מופע של ברירת המחדל SharedPreferences
עבור
האפליקציה, ניגשת לכל הערכים המאוחסנים, מחזירה אותם בלולאה ומדפיסה אותם
יומן.