在 Android 8.0 中,“设置”菜单中增加了一些能够涵盖常见使用情况的组件和微件。我们鼓励设备制造商和开发者在扩展“设置”应用时使用常用组件,以便新界面与现有的“设置”界面保持一致。
以下是改进摘要:
- 支持库偏好设置框架中的分隔线行为变化。现在,分隔线绘制在类别之间。
 - ActionBar 主题背景变化。现在,ActionBar 使用浅色色彩主题,且带有强调色文本。
 - 新的偏好设置布局。图标空间仍然存在,即使偏好设置没有图标时也是如此。
 
新的微件:
- 应用详细信息的标头 widget。显示应用图标、应用标签等信息。
 - 有些页面上具有展开按钮。页面在打开时可以是收起形式,隐藏不太重要的项目,直到用户点击展开按钮。
 - 默认应用选择器界面:
  
- 该界面用于选择默认浏览器、默认手机应用等。
 - 以前是一个对话框,现在是一个基于单选按钮的全屏界面。
 
 - “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。
 
 - 您可以在以下位置找到基类的代码:
 - MasterSwitchMasterSwitch 样式偏好设置
  
- 代码位于:
https://cs.android.com/android/platform/superproject/main/+/main:packages/apps/Settings/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java - WLAN 主开关就是一个示例用例。您可以在以下位置找到示例:
packages/apps/Settings/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java 
 - 代码位于:
 
实现
设备制造商可以开始使用所有新的组件,无需额外设置。 如果原始设备制造商 (OEM) 决定实现新的“MasterSwitch”样式偏好设置或默认应用选择器,则应查看本文档中的示例以及为每个组件编写的参考文件 (Javadoc),以获取更多详细信息。
自定义“设置”菜单
- 分隔线行为。要更改分隔线的绘制方式,请更新“设置”分隔线的样式并更改以下各项的值:
  
allowDividerAboveallowDividerBelowallowDividerAfterLastItem
 - ActionBar 主题背景颜色。Activity 应使用 
Theme.DeviceDefault.Settings作为其主题背景,或使用Theme.DeviceDefault.Settings作为父主题背景来创建自定义主题背景。 - 应用标头微件。在 AppHeaderController 中使用设置器自定义每个字段,并在设置所有字段后调用 
build()。 - 展开按钮:
  
- 要完全停用该功能,请替换 ProgressiveDisclosureMixin 的构造函数,并将 keepExpanded 设为 true。
 - 要自定义最开始显示多少个项目,请在 Fragment 的 
onAttach(Context)方法期间调用ProgressiveDisclosureMixin.setTileLimit()方法。