סקירה כללית

הגדרות רכב ( 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 בעת היצירה.

בקרי העדפה

כל דף הגדרות יכול להכיל מספר העדפות שונות.

ראה את התמונה הבאה כדי לראות כיצד רכיבים אלה קשורים:

רכיבי CarSettings

איור 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 . אלה צריכים להיות מונחים בתוך מודול הגדרות הרכב בנפרד משיעורי ההעדפות הבסיסיים.