ההגדרות ברכב (packages/apps/Car/Settings
) זמינות רק ב-Android Automotive OS (AAOS). ההגדרות ברכב שונות מההגדרות בטלפון (packages/apps/Settings
). ההגדרות ברכב מכילות כמה הגדרות מוכרות מהטלפון, אבל הן כוללות גם ממשק משתמש חזותי מותאם לרכב, אופטימיזציות למניעת הסחת דעת של הנהג ומספר רב של נקודות כניסה להתאמה אישית עבור יצרני ציוד מקורי.
בנוסף לסקירה הכללית של הגדרות הרכב שמופיעה בהמשך, תוכלו לקרוא את המאמרים הבאים כדי לקבל מידע נוסף על הגדרות הרכב:
- הוספת הגדרות לרכב
- סידור מחדש של הגדרות הרכב
- הגבלת הסחות הדעת בהגדרות הרכב
- הוספה של הגדרות הרכב לאינדקס החיפוש
- התאמה אישית של חלונית כפולה
ארכיטקטורה והנחיות
רוב הדפים בהגדרות הרכב מיושמים כסדרה של קטעים שמרחיבים את SettingsFragment, לכל אחד מהם יש פעילות משלו שמוגדרת ב-CarSettingActivities. הפעילויות הסטטיות האלה הן תוספות של BaseCarSettingsActivity. יש כמה יוצאים מן הכלל לכלל הזה, כמו קטעי קוד מיוחדים שמתרחבים מ-BaseFragment במקום מ-SettingsFragment
, וחלק מהפעילויות שנמצאות מחוץ ל-CarSettingActivities. כל אלה צריכים להיחשב כחריגים (ולא כתבניות שכדאי לפעול לפיהן).
העדפות סטטיות
העדפה סטטית מוגדרת ב-XML באמצעות התג Preference או התג CarUiPreference. בהטמעה של SettingsFragment
נעשה שימוש בשיטה getPreferenceScreenResId()
כדי לקבוע איזה קובץ XML מכיל את רשימת ההעדפות הסטטית שרוצים להציג.
העדפות דינמיות
בהעדפות דינמיות נעשה שימוש בתג PreferenceGroup או בהטמעה של PreferenceGroup.
באפליקציית CarSettings, העדפות דינמיות מייצגות קבוצה רגילה של העדפות שמפנות את המשתמש לדפים נוספים ב-CarSettings, אבל נוספו דרך Preference Controller במקום ב-XML. דוגמה לכך היא ההעדפה 'ניהול מקלדות' בקטע 'שפות וקלט', שמוסיפה באופן דינמי שיטות קלט לדף ההעדפות בהתאם לכך שהן מותרות או לא.
סרגי פעולות
בחלק העליון של כל מסך הגדרות יש סרגל פעולות, שיכול להכיל ניווט 'חזרה', כותרת של המסך וווידג'טים נוספים של פעולות (לדוגמה, לחצנים ומפסקים). שורות הפעולה האלה דומות ל-ActionBar ש-Android מספקת, אבל הן למעשה תצוגות בהתאמה אישית. ב-Android 11 ואילך, סרגל הכלים הזה נכלל בפריסה הבסיסית של המארז, שמכילה את התצוגות של סרגל הכלים ואת framelayout של שאר תוכן האפליקציה.
ווידג'טים של פעולות נוספות הם כיתות של MenuItem, וצריך ליצור אותם ב-onCreate
של SettingsFragment
או BaseFragment
הרלוונטי. מאפיינים כמו חשיפה, מצב וכו' צריכים להיות בשליטת setters בלוגיקה העסקית של SettingsFragment
.
// ExampleSettingsFragment.java public class ExampleSettingsFragment extends SettingsFragment { @Override protected List<MenuItem> getToolbarMenuItems() { return Collections.singletonList(mClearConfirmButton); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mButton = new MenuItem.Builder(getContext()) .setTitle(R.string.text) .setOnClickListener(mOnClickListener) .setUxRestrictions(CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP) .build(); } private void updateState() { button.setVisible(false); } }
בסרגלי הפעולה יש תמיכה באופטימיזציה למניעת הסחות דעת בהגדרות הרכב.
מגדירים את UXRestrictions ב-MenuItem.Builder
בזמן היצירה.
אמצעי בקרה על העדפות
בכל דף הגדרות יכולות להיות מספר העדפות שונות.
בתמונה הבאה אפשר לראות איך הרכיבים האלה קשורים זה לזה:
איור 1. רכיבי CarSettings
ה-PreferenceController
הוא רכיב שמתחשב במחזור החיים ומאפשר להכיל את הלוגיקה העסקית שקשורה להעדפות ספציפיות.
אפשר לצרף את PreferenceControllers
להעדפה הרלוונטית רק באמצעות XML.
// example_settings_fragment.xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/example_settings_title"> <Preference android:key="@string/pk_example_preference_key" android:title="@string/example_preference_title" settings:controller="com.android.car.settings.example.ExamplePreferenceController"/> </PreferenceScreen>
ההגדרות ברכב מונעות באופן מפורש את היצירה של PreferenceController
באמצעות קוד, כדי שיהיה קל יותר לשנות את היררכיית ההגדרות עם שינויים מינימליים בקוד Java.
יכול להיות ש-PreferenceController
צריך נתונים דינמיים כדי לפעול בצורה תקינה. לדוגמה, כדי ש-PreferenceController
יוכל להשבית התראות באפליקציה, הוא צריך לדעת באיזו אפליקציה לבצע את הפעולה.
מכיוון ש-PreferenceControllers
תמיד מוגדרים ב-XML, אין אפשרות לספק עוד ארגומנטים למבנה. במקום זאת, הערכים הנוספים האלה ניתנים באמצעות setters ציבוריים ב-PreferenceController
, והם מוגדרים באמצעות השיטה use(...)
מ-SettingsFragment
.
// ExamplePreferenceController.java public class ExamplePreferenceContorller extends PreferenceController<Preference> { private ExampleArg mExampleArg; public ExamplePreferenceController(...) { ... } public void setExampleArg(ExampleArg exampleArg) { mExampleArg = exampleArg; } } // ExampleSettingsFragment.java public class ExampleSettingsFragment extends SettingsFragment { @Override @XmlRes protected int getPreferenceScreenResId() { Return R.xml.example_settings_fragment; } @Override public void onAttach(Context context) { ExampleArg arg = (ExampleArg) getArguments().getSerializeable(ARG_KEY); ExamplePreferenceController controller = use(ExamplePreferenceController.class, R.string.pk_example_preference_key); controller.setExampleArg(arg); } }
ככל שמשתמשים בשיטה use(...)
בתדירות גבוהה יותר, כך קשה יותר להשיג את היעד המקורי – אפשרות לסדר מחדש את היררכיית ההגדרות עם שינויים מינימליים בקוד Java, כי צריך להעתיק קטעים גדולים מקוד הפלח הקיים אל הפלח החדש שנוצר. אחת הדרכים להקל על התהליך היא:
- צמצום השימוש ב-
use(...)
. - נסו לשמור כל קריאה ל-
use(...)
במקום אחד בחלק (לדוגמה, בשיטהonAttach()
).
טיפול ב-Intent
כל הכוונות שצריך לטפל בהן באפליקציית ההגדרות לרכב מוגדרות בקובץ המניפסט. בדרך כלל, ה-Intents מוגדרים ומטופלים כמו רוב האפליקציות הרגילות ל-Android, עם כל הפעילויות ומסנני ה-Intent שמוגדרים במניפסט.
שינוי קטע השורש
אם רוצים, אפשר להציג או להסתיר את סמל היציאה באמצעות config_show_settings_root_exit_icon
.
התאמה אישית של העיצוב
התאמה אישית של מאפיינים ומשאבים אחרים
אפליקציית ההגדרות ברכב משתמשת בעיקר ב-CarSettingTheme
, שהוא תוסף של Theme.CarUi
. העיצוב הזה משמש לסטנדרטיזציה של המראה והתחושה של אפליקציות המערכת, כדי להבטיח עקביות במערכת.
התאמה אישית של ההעדפות
אפשר להתאים אישית את ההעדפות במיקומים הנוספים הבאים:
- הפריסה של חלק ממערכי ההעדפות הבסיסיים מוגדרת ב-
car_preference
ומוחלפת בגרסאות build לרכב. אפשר להחליף כאן את כל הפריסות בהתאמה אישית של כיתות ההעדפות הבסיסיות. - ההגדרות ברכב משתמשות בהעדפות מותאמות אישית מסוימות שמוגדרות בעיקר בחבילה
common
. צריך להוסיף אותן למעלה של מודול ההגדרות ברכב בנפרד ממערכי ההעדפות הבסיסיים.