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 | 內容窗格(或單窗格配置中的主窗格)的包裝器佈局。機箱基礎佈局(帶有工具欄)圍繞該視圖進行了環繞。 |
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
指定類別的注入首選項的圖標也被視為頂級圖標。提供的圖標被插入相同的值,並且與為所有其他頂級圖標指定的形狀相同(見上文)。但是,背景是通過按此順序查看以下屬性來確定的:
-
com.android.settings.bg.argb
來自註入應用程序的元數據。 -
com.android.settings.bg.hint
來自註入應用程序的元數據。 -
top_level_injected_default_background
在res/values/colors.xml
中指定。
要忽略注入應用程序數據並始終使用默認背景,請將config_top_level_injection_background_always_use_default
設置為true
。