在 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 样式偏好设置
- 代码位于:
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),以获取更多详细信息。
自定义“设置”菜单
- 分隔线行为。要更改分隔线的绘制方式,请更新“设置”分隔线的样式并更改以下各项的值:
allowDividerAbove
allowDividerBelow
allowDividerAfterLastItem
- ActionBar 主题背景颜色。Activity 应使用
Theme.DeviceDefault.Settings
作为其主题背景,或使用Theme.DeviceDefault.Settings
作为父主题背景来创建自定义主题背景。 - 应用标头微件。在 AppHeaderController 中使用设置器自定义每个字段,并在设置所有字段后调用
build()
。 - 展开按钮:
- 要完全停用该功能,请替换 ProgressiveDisclosureMixin 的构造函数,并将 keepExpanded 设为 true。
- 要自定义最开始显示多少个项目,请在 Fragment 的
onAttach(Context)
方法期间调用ProgressiveDisclosureMixin.setTileLimit()
方法。