模式和组件

在 Android 8.0 中,“设置”菜单新增了多个组件和小部件,涵盖了常见用途。 鼓励设备制造商和开发人员在扩展“设置”应用时使用通用组件,以便新的用户界面与现有的“设置”UI 保持一致。

以下是改进摘要

  • 支持库 Preference 框架中的分隔线行为变更。分隔线现在绘制在类别之间。
  • ActionBar 主题变更。 ActionBar 现在使用浅色主题,带有强调色文本。
  • 新的偏好设置布局。即使偏好设置没有图标,图标的空间仍然保留。

新的小部件

  • 用于应用详情的标题小部件。显示应用图标、应用标签和其他信息。
  • 某些页面上的展开按钮。页面可以初始为折叠状态,并隐藏不太重要的项目,直到用户点击展开按钮。
  • 默认应用选择器 UI
    • 用于选择默认浏览器、默认电话应用等的 UI。
    • 以前是一个对话框,现在它是一个全屏的基于单选按钮的 UI。
  • “MasterSwitch” 样式偏好设置。这是一个具有两个点击目标的偏好设置。左侧目标指向子设置片段或 intent。右侧目标是开关切换,控制整个页面的开/关。

示例和源代码

  • 分隔线行为
    • “设置”中的所有页面都已修改为使用新的分隔线行为。
    • 分隔线行为在以下位置定义为 ThemeOverlay
      packages/apps/Settings/res/values/styles_preference.xml
  • ActionBar 主题变更
    • “设置”中的所有页面都已修改为使用新的 ActionBar 主题。
    • 该主题在 Theme.DeviceDefault.Settings 中定义
  • 新的偏好设置布局
    • “设置”中的许多页面现在正在使用新的偏好设置布局。
    • 您可以在以下位置找到代码
      packages/apps/Settings/res/values/styles_preference.xml
  • 应用标题小部件
    • “设置”中的大多数应用信息页面已经实现了新的应用标题。
    • 示例和代码可以在以下位置找到
      packages/apps/Settings/src/com/android/settings/applications/AppHeaderController.java
  • 展开按钮
    • 示例和代码可以在以下位置找到
      packages/apps/Settings/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java

      注意: 此组件必须与 DashboardFragment 一起使用。(有关 DashboardFragment 的更多详细信息,请参阅 更新的信息架构。)

  • 默认应用选择器
    • 您可以在以下位置找到基类的代码
      packages/apps/Settings/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
    • DefaultAppPickerFragment 有几个子类,每个子类为不同的 intent 实现一个选择器。
  • MasterSwitch 样式偏好设置
    • 代码位于:https://cs.android.com/android/platform/superproject/main/+/main:packages/apps/Settings/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java
    • 一个用例示例是 Wi-Fi 主开关。您可以在以下位置找到一个示例:packages/apps/Settings/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java

实现

设备制造商可以立即开始使用所有新组件。 如果 OEM 决定实现新的“MasterSwitch”样式偏好设置或默认应用选择器,他们应遵循本文档中的示例以及为每个组件编写的参考文件 (Javadoc) 以获取更多详细信息。

自定义设置菜单

  • 分隔线行为。 要更改分隔线的绘制方式,请更新“设置”分隔线的样式并更改以下值
    • allowDividerAbove
    • allowDividerBelow
    • allowDividerAfterLastItem
  • ActionBar 主题颜色。 Activity 应使用 Theme.DeviceDefault.Settings 作为其主题,或使用 Theme.DeviceDefault.Settings 作为父主题创建自定义主题。
  • 应用标题小部件。 使用 AppHeaderController 中的 setter 自定义每个字段,并在设置完所有字段后调用 build()
  • 展开按钮
    • 要完全禁用该功能,请覆盖 ProgressiveDisclosureMixin 的构造函数并将 keepExpanded 设置为 true。
    • 要自定义最初显示多少项目,请在片段的 onAttach(Context) 方法期间调用 ProgressiveDisclosureMixin.setTileLimit() 方法。