在 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()
方法。