雙窗格自訂功能

Android 12 導入了雙窗格設計,左側為靜態 L0 選單,右側則是內容窗格。這項功能推出許多新的自訂選項。本頁會詳細說明這些功能,並說明如何自訂偏好設定。

還原為單一窗格

根據預設,如果應用程式視窗的寬度大於或等於 1400dp,CarSettings 就會顯示雙窗格檢視畫面,否則則會顯示單一窗格檢視畫面。如要針對特定裝置自訂這項設定,請使用執行階段資源覆蓋 (RRO) 指定必要的設定值:

說明
config_global_force_single_pane 如果整個應用程式要在單一檢視窗設定中執行,請將其設為 true
config_homepage_fragment_class 指定首頁的起始片段。在雙窗格中,這會用於內容窗格中的初始片段。在單一窗格中,這應該是首頁片段。

標頭鍵

由於不同的 CarSettings 活動可自訂 IA,提供標頭鍵對應可簡化自訂作業。在 AndroidManifest.xml 中,每個支援雙窗格的活動都會在中繼資料內指定 TOP_LEVEL_HEADER_KEY。這個值會指向 res/values/header_keys.xml 中指定的索引鍵,該索引鍵會對應至所屬起始片段的上層選單項目偏好設定鍵。因此,如果活動的起始片段有所變更,或 IA 經過重新排列,使特定片段屬於不同的頂層偏好設定,您可以更新 header_keys.xml 檔案中的相關對應,以指定正確的值。

自訂活動版面配置

BaseCarSettingsActivity 的版面配置位於 res/layout/car_setting_activity 和以下各節:

說明
top_level_menu 雙窗格設定中顯示的頂層選單片段。這個部分的寬度是由 top_level_menu_width 指定。這個檢視畫面會包裝在底層機殼版面配置 (含工具列) 中。
top_level_divider 分割兩個窗格的垂直線,您可以使用 top_level_divider_width 自訂其寬度。
fragment_container_wrapper 內容窗格 (或單一窗格設定中的主要窗格) 的包裝函式版面配置。這個檢視畫面會包覆底層結構 baselayout (含工具列)。
settings_focus_parking_view 自訂實作 FocusParkingView,以便在需要時保留旋轉焦點。
fragment_container 主要內容容器。內容片段會將此值做為目標版面配置。
restricted_message 使用者體驗受限的封鎖檢視畫面,顯示在 BaseFragment 的執行個體上。

圖 1. 雙窗格版面配置

頂層偏好設定

頂層偏好設定是自訂的 CarUiPreferences,其中的版面配置經過微幅修改,可變更偏好設定的高度和背景形狀。您可以透過多種方式自訂這些偏好設定的外觀:

說明
res/layout/top_level_preference.xml 重疊整個偏好設定版面配置。
top_level_preference_min_height 頂層偏好設定的最小高度。視內容而定 (例如是否有字幕),偏好設定可能會比這個值高。
top_level_preference_corner_radius 圓角圓角的半徑。
top_level_preference_background 頂層偏好設定的背景,當前未醒目顯示時。
top_level_preference_highlight 醒目顯示時,頂層偏好設定的背景。

頂層圖示

圖 2 說明頂層圖示現在如何由彩色背景形狀內的向量圖示組成。這個形狀目前已設定為支援橢圓形或矩形。預設形狀為橢圓形。

如要變更預設值,請修改 config_top_level_icon_shape 中的值 (0 為矩形,1 為橢圓形)。建立圖示時,請使用 top_level_foreground_icon_inset 從背景形狀內嵌入前景圖示。每個頂層圖示都有 res/values/colors.xml 中指定的前景色,以及 res/color 資料夾中指定的背景色。

如要建立自訂外觀,您可以覆寫所有色彩值。

圖 2. 頂層偏好設定元件

對於由 config_top_level_injection_categories 指定的類別,系統也會將注入偏好設定的圖示視為頂層圖示。提供的圖示會以相同的值內嵌,並採用與所有其他頂層圖示相同的形狀 (請參閱上方說明)。不過,系統會依序查看下列屬性,判斷背景:

  1. com.android.settings.bg.argb 來自注入應用程式的中繼資料。
  2. com.android.settings.bg.hint 來自注入應用程式的中繼資料。
  3. top_level_injected_default_background 已在 res/values/colors.xml 中指定。

如要忽略插入的應用程式資料,並一律使用預設背景,請將 config_top_level_injection_background_always_use_default 設為 true