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 |
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 为椭圆形)。这些图标是通过将前景图标从背景形状中嵌入 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
。