總覽

車輛設定 (packages/apps/Car/Settings) 是為 Android Automotive OS (AAOS)。車輛設定與手機設定不同 (packages/apps/Settings)。雖然車輛設定包含一些大家熟悉的手機設定, 車輛設定提供車輛化的視覺使用者介面、讓駕駛人分心等級最佳化功能 以及許多原始設備製造商 (OEM) 的自訂進入點

除了下方提供的車輛設定總覽外,請參閱相關的 主題,進一步瞭解車輛設定:

架構與指南

「車輛設定」中的大部分頁面都以一系列片段實作 擴充 SettingsFragmentCarSettingActivities。這些靜態活動是從 BaseCarSettingsActivity 擴充。雖然這項規則有一些例外狀況,例如一些擴充的特殊片段 BaseFragment (而非 SettingsFragment),以及位於 CarSettingActivities 外的部分活動,這些活動都應視為例外狀況 (而非應遵循的模式)。

靜態偏好設定

靜態偏好設定是在 XML 中使用 Preference 值 或 CarUiPreference 標記之前。SettingsFragment 實作會使用 getPreferenceScreenResId() 方法,定義哪個 XML 檔案包含要顯示的靜態偏好設定清單。

動態偏好設定

動態偏好設定使用 PreferenceGroup 標記或 PreferenceGroup 實作。

在 CarSettings 應用程式中,動態偏好設定代表的是一組正常的 透過偏好設定將使用者導向 CarSettings 內的其他頁面,但 透過 [偏好設定] 中的 控制器,而不是在 XML 中。例如「管理鍵盤」 輸入偏好設定 (動態新增輸入內容) 方法,根據這些輸入法是否 允許或禁止。

動作列

每個設定畫面頂端都有動作列,可包含 「返回」導覽、畫面標題和補充的動作小工具 (例如 按鈕和切換按鈕)。這些動作列與 ActionBar 類似 但實際上是自訂檢視畫面在 Android 11 以上版本中 工具列包含在底座基本版面配置中,其中包含 和頁框版面配置。

補充動作小工具是 MenuItem 類別,應在 相應 SettingsFragmentonCreate,或 BaseFragment。顯示設定、狀態等屬性應該 由 SettingsFragment 商業邏輯中的 setter 控制。

// 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);
    }
}

動作列提供以下支援: 車輛設定中的分心因素最佳化功能。 在建立時設定 MenuItem.Builder 中的 UX 限制。

偏好設定控制器

每個設定頁面可包含多個 偏好設定

請參閱下圖,瞭解這些元件的關聯性:

CarSettings 元件

圖 1. 車輛設定元件

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 的公開 setter 提供,並使用 SettingsFragmentuse(...) 方法。

// 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() 方法中)。
,瞭解如何調查及移除這項存取權。

意圖處理

所有意圖 應由「車輛設定」應用程式處理,詳情請參閱 資訊清單 檔案。意圖通常定義及處理,就像大多數標準 Android 應用程式一樣。 使用資訊清單中定義的所有活動和意圖篩選器。

變更根片段

如有需要,您可以使用 config_show_settings_root_exit_icon 顯示或隱藏「結束」圖示。

自訂主題

自訂其他屬性和資源

車輛設定應用程式主要使用 CarSettingTheme。 這是 Theme.CarUi 的延伸。這個主題是用來標準化 確保系統應用程式的外觀和風格。

自訂偏好設定

自訂偏好設定適用於下列額外位置:

  • 部分基本偏好設定類別的版面配置已定義於 car_preference疊加 車輛版本基本偏好設定類別的任何自訂版面配置可以是 在這裡。
  • 車輛設定會使用主要在 common 套件。應在「車輛設定」模組中個別重疊, 基本偏好設定類別。