雙窗格自定義

Android的12引入了一個新的雙面板設計,在左側靜態L0菜單,右側的內容窗格。此功能引入了許多新的自定義選項。本文詳細介紹了這些功能,並解釋瞭如何自定義您自己的首選項。

恢復到單個窗格

默認情況下,CarSettings 現在在應用程序窗口的寬度大於或等於 1400dp 時顯示雙窗格視圖,否則顯示單窗格視圖。要為特定設備自定義此設置,請使用運行時資源覆蓋 (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被重新佈置,使得特定片段下一個不同的頂級優先下降時,相關的映射(S)在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上的實例被示出UX-限制阻擋視圖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是橢圓形的)。圖標被通過insetting前景圖標創建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_defaulttrue