模式和组件

在 Android 8.0 中,“设置”菜单中增加了一些能够涵盖常见使用情况的组件和微件。我们鼓励设备制造商和开发者在扩展“设置”应用时使用常用组件,以便新界面与现有的“设置”界面保持一致。

以下是改进摘要:

  • 支持库偏好设置框架中的分隔线行为变化。现在,分隔线绘制在类别之间。
  • ActionBar 主题背景变化。现在,ActionBar 使用浅色主题背景,且带有强调色文本。
  • 新的偏好设置布局。图标空间仍然存在,即使偏好设置没有图标时也是如此。

新的微件:

  • 应用详细信息的标头微件。显示应用图标、应用标签等信息。
  • 有些页面上具有展开按钮。页面在打开时可以是收起形式,隐藏不太重要的项目,直到用户点击展开按钮。
  • 默认应用选择器界面:
    • 该界面用于选择默认浏览器、默认手机应用等。
    • 以前是一个对话框,现在是一个基于单选按钮的全屏界面。
  • “MasterSwitch”样式偏好设置。这是具有两个点击目标的偏好设置。左侧目标会导致子集化的片段或 intent。右侧目标是一个切换开关,针对整个页面控制开启/关闭。

示例和来源

  • 分隔线行为
    • “设置”中的所有页面均经过修改以使用新的分隔线行为。
    • 分隔线行为在以下文件中定义为一个 ThemeOverlay:
      packages/apps/Settings/res/values/styles_preference.xml
  • ActionBar 主题变化
    • “设置”中的所有页面均经过修改以使用新的 ActionBar 主题背景。
    • 主题背景在 Theme.DeviceDefault.Settings 中定义
  • 新的偏好设置布局
    • 现在,“设置”中的许多页面都使用新的偏好设置布局。
    • 您可以在以下文件中找到代码:
      packages/apps/Settings/res/values/styles_preference.xml
  • 应用标头 widget
    • “设置”中的大多数应用信息页面都已实现新的应用标头。
    • 相关示例和代码可以在以下位置找到:
      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 样式偏好设置
    • 代码位于:packages/apps/Settings/src/com/android/settings/widget/MasterSwitchPreference.java
    • WLAN 主开关就是一个示例用例。您可以在以下位置找到示例: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 中使用设置器来自定义每个字段,并在设置所有字段后调用 build()。
  • 展开按钮:
    • 要完全停用该功能,请替换 ProgressiveDisclosureMixin 的构造函数,并将 keepExpanded 设为 true。
    • 要自定义最开始显示多少个项目,请在 Fragment 的 onAttach(Context) 方法期间调用 ProgressiveDisclosureMixin.setTileLimit() 方法。