雙窗格定制

Android 12 引進了雙窗格設計,左側是靜態 L0 選單,右側是內容窗格。此功能引入了許多新的自訂選項。本頁詳細介紹了這些功能,並解釋瞭如何自訂您自己的首選項。

恢復為單窗格

預設情況下,當應用程式視窗寬度大於或等於 1400dp 時,CarSettings 現在顯示雙窗格視圖,否則顯示單窗格視圖。若要針對特定裝置對此進行自訂,請使用執行時間資源覆寫 (RRO) 來定位必要的設定值:

價值描述
config_global_force_single_pane如果整個應用程式要在單一窗格配置中執行,則設定為true
config_homepage_fragment_class指定主頁的起始片段。在雙窗格中,這用於內容窗格中的初始片段。在單窗格中,這應該是主頁片段。

標題鍵

由於不同的 CarSettings 活動可以具有自訂的 IA,因此提供了標頭鍵映射來簡化自訂。在AndroidManifest.xml中,每個支援雙窗格的 Activity 都在其元資料中指定了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內容窗格(或單窗格配置中的主窗格)的包裝佈局。機箱基本佈局(帶有工具列)圍繞此視圖。
settings_focus_parking_view FocusParkingView的自訂實現,可在需要時保持旋轉焦點。
fragment_container主要內容容器。內容片段使用它作為目標佈局。
restricted_message將在BaseFragment實例上顯示的 UX 限制的阻塞視圖。

圖 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_backgroundres/values/colors.xml中指定。

若要忽略注入應用程式資料並始終使用預設背景,請將config_top_level_injection_background_always_use_default設為true