Android Automotive 提供專為車輛開發的新系統 UI。系統 UI 的大部分元件都與架構服務緊密結合。「系統使用者介面」是指螢幕上顯示的任何元素,但不包含應用程式。汽車系統使用者介面 (位於 CarSystemUI 元素套件中) 是 Android 系統使用者介面 (位於系統使用者介面套件中) 的擴充功能,專為車輛進行客製化。
什麼是系統 UI?
汽車系統 UI 專屬元件包括:
元件 | 說明 |
---|---|
鎖定螢幕 UI | 使用者驗證特定使用者帳戶的畫面。 |
導覽列 | 系統資訊列可置於螢幕左側、底部或右側,並可加入面向不同應用程式的面向按鈕、切換通知面板,以及提供車輛控制項 (例如空調)。這與 Android 系統 UI 實作方式不同,後者提供返回、主畫面和應用程式堆疊按鈕。 |
狀態列 | 系統列會沿著螢幕排列,並充當導覽列。狀態列也提供以下功能:
|
系統 UI | 指的是畫面上顯示的任何元素,但不包含應用程式。 |
使用者切換器 UI | 使用者可選取其他使用者的畫面。 |
音量 UI | 當駕駛者使用實體音量鍵調整裝置音量時,系統會顯示這個對話方塊。 |
系統 UI 的運作方式
系統 UI 是 Android 應用程式,會在裝置開機時執行。應用程式會透過 SystemServer 的反射啟動。以下列出系統 UI 中與使用者可見部分最相關的進入點。使用這些元件,為 Android 系統 UI 自訂汽車專屬功能。
config_statusBarComponent
config_systemUIFactoryComponent
CarSystemUI 是 System UI 套件的擴充功能,也就是說,CarSystemUI 套件可使用並覆寫 System UI 套件中的類別和資源。
自訂系統 UI
重疊說明
雖然您可以修改 Android 原始碼來自訂系統 UI,但這麼做會使日後套用 Android 更新變得更加困難和複雜。相反地,Android 支援使用疊加目錄,讓您不必修改原始碼就能取代資源檔。在 Android 建構系統中,覆蓋系統會以受控方式覆寫檔案。所有修改過的檔案都會清楚標示,無須遍歷整個 AOSP 原始碼樹狀結構。
覆蓋檔案必須放置在 PRODUCT_PACKAGE_OVERLAYS
目錄中,且必須與原始 AOSP 根結構的子資料夾完全相同。如果是 Android 10 以上版本,PRODUCT_PACKAGE_OVERLAYS
會設為:
PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay
Automotive System UI 會使用系統 UI 和 CarSystemUI 套件的資源,也就是說,每個位置的資源都可以使用疊加層覆寫,以影響 Automotive System UI 的外觀和感受。
如要取代檔案,請在您指定的 /overlay
目錄中複製要取代的檔案目錄結構,然後在該目錄中加入取代檔案。例如,如要取代:
frameworks/base/packages/CarSystemUI/res/layout/super_status_bar.xml
新增替換 super_status_bar.xml
檔案,位於:
packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/
如要取代 frameworks/base/packages/SystemUI/res/values/config.xml
(在系統 UI 中,不是 CarSystemUI),請將替換 config.xml
檔案新增至:
packages/services/Car/car_product/overlay/frameworks/base/packages/SystemUI/res/layout/
或
packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/
以下說明兩個主要自訂進入點。
導覽列
汽車系統 UI 可在螢幕左側、底部和右側顯示三個導覽列。您可以使用下列設定切換各個系統列的顯示/隱藏狀態:
config_enableLeftSystemBar
config_enableBottomSystemBar
config_enableRightSystemBar
每個列都有已佈建和未佈建狀態,您可以透過重疊相應的版面配置檔案來自訂:
car_left_system_bar.xml
car_left_system_bar_unprovisioned.xml
car_system_bar.xml
(底部導覽列的版面配置)car_system_bar_unprovisioned.xml
car_right_system_bar.xml
car_right_system_bar_unprovisioned.xml
這些版面配置必須在頂層包含 com.android.systemui.car.systembar.CarSystemBarView
,後者可納入任何必要的檢視畫面。您可以使用 com.android.systemui.car.systembar.CarSystemBarButton
加入導覽列內的按鈕。
如果裝置已為特定使用者正確佈建,這些檢視畫面就會在 CarSystemBar#createSystemBar
中展開。
狀態列
您可以將狀態列視為具有額外功能的導覽列。與導覽列不同,狀態列沒有用來停用的標記。您可以使用下列方式修改狀態列:
car_top_navigation_bar.xml
car_top_navigation_bar_unprovisioned.xml
這些版面配置必須在頂層包含 com.android.systemui.statusbar.car.CarNavigationBarView
。狀態列包含狀態圖示。如要變更圖示大小,請使用縮放比例一律縮放圖示,而非指定特定大小。舉例來說,在覆疊檔案 /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml
中,新增下列尺寸,將圖示大小加倍:
<resources> <!-- The amount by which to scale up the status bar icons.--> <item name="status_bar_icon_scale_factor" format="float" type="dimen">2</item> </resources>
狀態列位於特殊的視窗層,該層也包含通知面板、使用者切換器、抬頭通知 (HUN) 和鍵盤保護程式。super_status_bar.xml
包含這些元素的各種版面配置。
系統使用者介面原始碼變更
疊加層可能無法提供足夠的彈性,無法充分自訂系統 UI 行為。
警示。對 Android 原始碼所做的變更,在後續 Android 版本中難以更新。強烈建議您擴充 Automotive System UI 程式碼,而非直接修改程式碼。這樣一來,由於所有自訂項目都是透過已知的 API 途徑實作,因此可以透過最少的合併衝突升級基礎的 Automotive System UI 原始碼。
系統 UI 的大部分內容都可以透過以下兩個進入點自訂:
config_statusBarComponent
config_systemUIFactoryComponent
舉例來說,如果您建立名為 com.android.systemui.statusbar.car.custom.CustomCarStatusBar
的類別,並擴充 CarStatusBar
,請將 config_statusBarComponent
更新為指向這個新元件。擴充這個類別可讓您自訂與系統列和通知邏輯相關的大部分元素。
同樣地,您可以建立 CustomCarSystemUIFactory
並放入 config_systemUIFactoryComponent
。使用這個類別更新 VolumeUI 和鎖定畫面的功能。
自訂使用者切換和解鎖
以下說明如何自訂使用者切換體驗。
字詞 | 說明 |
---|---|
鍵盤鎖 | 全螢幕對話方塊,可避免意外與前景應用程式互動。 在設定多位使用者時,可保護每位使用者的隱私。 |
載入對話方塊 | 切換使用者時顯示的載入畫面。 |
螢幕鎖定、bouncer | 要求使用者輸入 PIN 碼、解鎖圖案或密碼的畫面。 |
使用者自訂 | Android 使用者。 |
使用者挑選器 | 裝置啟動時顯示的使用者挑選畫面。 |
使用者切換器 | 從「快速設定」切換畫面時,會顯示使用者切換器。 |
自訂使用者切換
鍵盤鎖和 Bouncer
在 Android Automotive OS 中,只有在使用者點選鎖定畫面上的「取消」按鈕時,系統才會顯示含有使用者挑選器的 Keyguard 畫面。下圖為鎖定螢幕畫面。
圖 1. 鍵盤鎖螢幕
使用者選取用於解鎖裝置的隱私權類型後,系統會顯示含有 bouncer 的鎖定畫面,如以下所示。
圖 2. 螢幕鎖定畫面。
如果居家鎖設定為手動開啟或關閉電源,請按照下列操作說明操作:
adb shell input keyevent 26
使用者挑選器
當與車輛系統 UI 狀態列整合的裝置和地圖重新啟動時,系統會顯示使用者挑選畫面。詳情請參閱 FullscreenUserSwitcher
。
圖 3. 使用者挑選器畫面
您可以在 car_fullscreen_user_switcher.xml
中自訂這個畫面的版面配置。
載入畫面
無論進入點為何,只要使用者切換,系統就會顯示載入畫面。例如透過使用者挑選器或「設定」畫面。載入畫面是架構系統 UI 的必要元素,並對應至名為 CarUserSwitchingDialog
的公開類別。請參閱上圖 3 的範例。
您可以使用 Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog
自訂主題。
如要設定 Android 使用者,初始設定精靈流程可讓駕駛員自行設定使用者名稱。如果駕駛人將 Android 使用者與 Google 帳戶建立關聯,系統會從該帳戶選取使用者名稱。不過,如果駕駛人指定名稱 (例如 DriverB),然後稍後將該使用者名稱與名為 Maddy 的 Google 帳戶建立關聯,系統就不會變更原本指派的名稱 (DriverB),因為該名稱已明確設定。駕駛員只能在「設定」選單中變更名稱。
您可以在 car_user_switching_dialog.xml.
中自訂版面配置
OEM 廠商可以使用名為 NoActionBar.Fullscreen
的主題隱藏狀態列和導覽列。(這是原始的系統 UI,已針對車輛參考 UI 進行更新)。詳情請參閱「自訂」。
雖然原始設備製造商 (OEM) 可以提供使用者介面切換使用者的進入點,但結果有時可能不如預期。發生這種情況時,請採取以下行動:
- OEM 會建立並顯示自訂的載入畫面 (或對話方塊)。
- 針對使用者體驗,當使用者選取切換方式時,原始設備製造商會啟動自訂載入畫面,並在使用者切換完成時隱藏該畫面。
- OEM 必須根據偏好設定優先順序視窗。例如優先順序較高的視窗類型。優先順序不得超過 Keyguard 的優先順序。
- 如
config_customuserswitchui
所述,OEM 會在核心架構config.xml
中設定config_customUserSwitchUi=true
。因此,架構「不會」顯示CarUserSwitchingDialog
。
自訂螢幕鎖定畫面
螢幕鎖定畫面是系統 UI 的必要元素,可由原始設備製造商 (OEM) 自訂。如要自訂流程,請從 frameworks/base/packages/CarSystemUI/
開始。
自訂首次使用者設定
設定精靈會執行首次使用者設定。這也是可自訂的項目。您可以使用 UserManager API 建立使用者。在某些情況下,您可以在背景中實作這項操作,藉此簡化設定精靈程序。