הגדרות רכב ( packages/apps/Car/Settings
) מסופקות במיוחד עבור מערכת ההפעלה Android Automotive (AAOS). הגדרות הרכב שונות מהגדרות הטלפון ( packages/apps/Settings
). בעוד שהגדרות רכב מכילות כמה הגדרות טלפון מוכרות, הגדרות רכב מספקות ממשק משתמש ויזואלי המותאם לרכב , אופטימיזציות של הסחת דעת לנהג ונקודות כניסה רבות להתאמה אישית עבור יצרני OEM.
בנוסף לסקירה הכללית של הגדרות רכב המופיעות להלן, עיין בנושאים הקשורים אלה למידע נוסף על הגדרות רכב:
- הוספת הגדרות רכב
- ארגון מחדש של הגדרות הרכב
- אופטימיזציה של הסחת דעת בהגדרות רכב
- הגדרות רכב חיפוש אינדקס
- התאמה אישית של חלונית כפולה
אדריכלות והנחיות
רוב הדפים ב-Car Settings מיושמים כסדרה של קטעים המרחיבים את SettingsFragment , שלכל אחד יש פעילות משלו המוגדרת ב- CarSettingActivities . פעילויות סטטיות אלו מורחבות מ- BaseCarSettingsActivity . אמנם ישנם כמה חריגים לכלל זה, כגון כמה קטעים מיוחדים שמרחיבים את BaseFragment ולא SettingsFragment
וחלק מהפעילויות השוכנות מחוץ ל-CarSettingActivities , את כולם יש לראות כחריגים (לא כדפוסים שיש לעקוב אחריהם).
העדפות סטטיות
העדפה סטטית מוגדרת ב-XML באמצעות התג Preference או CarUiPreference . יישום SettingsFragment
משתמש בשיטת getPreferenceScreenResId()
כדי להגדיר איזה קובץ XML מכיל את הרשימה הסטטית של העדפות להצגה.
העדפות דינמיות
העדפות דינמיות משתמשות בתג PreferenceGroup או ביישום של PreferenceGroup.
בתוך אפליקציית CarSettings, העדפות דינמיות מייצגות קבוצה רגילה של העדפות המפנה את המשתמש לדפים נוספים בתוך CarSettings, אך שנוספו באמצעות בקר ההעדפות במקום ב-XML. דוגמה לכך היא העדפת ניהול מקלדות תחת העדפת שפות וקלט אשר מוסיפה באופן דינמי שיטות קלט לדף ההעדפות בהתבסס על האם שיטות קלט אלו מותרות או לא.
סרגלי פעולה
בחלק העליון של כל מסך הגדרות יש סרגל פעולה, שיכול להכיל ניווט "חזרה", כותרת מסך ווידג'טים לפעולות משלימות (לדוגמה, כפתורים ומתגים). סרגלי פעולה אלה דומים ל- ActionBar שמספק אנדרואיד, אך הם למעשה תצוגות מותאמות אישית. באנדרואיד 11 ומעלה, סרגל כלים זה כלול בפריסת בסיס המארז, המכילה את התצוגות עבור סרגל הכלים ופריסת מסגרת עבור שאר תוכן האפליקציה.
ווידג'טים של פעולה משלימים הם מחלקות MenuItem ויש ליצור אותם ב- onCreate
של SettingsFragment
או BaseFragment
המתאימים. מאפיינים כגון נראות, מצב וכן הלאה צריכים להיות נשלטים על ידי מגדירים בלוגיקה העסקית של 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); } }
פסי הפעולה מגיעים עם תמיכה באופטימיזציה של הסחת דעת בהגדרות המכונית . הגדר את הגבלות UX ב- 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, אין דרך לספק ארגומנטים של בנאי נוספים. במקום זאת, ערכים נוספים אלה מסופקים דרך מגדירים ציבוריים ב- 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()
).
טיפול בכוונות
כל הכוונות שאליהן צריך לטפל באפליקציית הגדרות הרכב מוגדרות בקובץ המניפסט . כוונות מוגדרות ומטופלות בדרך כלל כמו רוב אפליקציות האנדרואיד הסטנדרטיות, כאשר כל הפעילויות ומסנני הכוונות מוגדרים במניפסט.
שנה את קטע השורש
אם תרצה, ניתן להציג או להסתיר את סמל היציאה באמצעות config_show_settings_root_exit_icon
.
התאם אישית את הנושא
התאם אישית תכונות ומשאבים אחרים
אפליקציית הגדרות הרכב משתמשת בעיקר ב- CarSettingTheme
, שהיא הרחבה של Theme.CarUi
. ערכת נושא זה משמשת לסטנדרטיזציה של המראה והתחושה של אפליקציות מערכת כדי להבטיח עקביות במערכת.
התאמה אישית של העדפות
התאמה אישית של העדפות משתרעת על המיקומים הנוספים הבאים:
- הפריסה של כמה מחלקות העדפה בסיסיות מוגדרת ב-
car_preference
ומצוידת על בניית מכוניות. ניתן להחליף כאן כל פריסות התאמה אישית עבור מחלקות העדפת הבסיס. - הגדרות רכב משתמשות בכמה העדפות מותאמות אישית המוגדרות בעיקר בחבילה
common
. אלה צריכים להיות מונחים בתוך מודול הגדרות הרכב בנפרד משיעורי ההעדפות הבסיסיים.