双窗格定制,双窗格定制

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

,

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