| <html devsite><head> |
| <title>模式和组件</title> |
| <meta name="project_path" value="/_project.yaml"/> |
| <meta name="book_path" value="/_book.yaml"/> |
| </head> |
| <body> |
| <!-- |
| Copyright 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <p> |
| 在 Android 8.0 中,“设置”菜单中增加了一些能够涵盖常见使用情况的组件和微件。我们鼓励设备制造商和开发者在扩展“设置”应用时使用常用组件,以便新界面与现有的“设置”界面保持一致。 |
| </p> |
| |
| <p> |
| 以下是改进摘要: |
| </p> |
| |
| <ul> |
| <li>支持库偏好设置框架中的分隔线行为变化。现在,分隔线绘制在类别之间。</li> |
| <li>ActionBar 主题背景变化。现在,ActionBar 使用浅色主题背景,且带有强调色文本。</li> |
| <li>新的偏好设置布局。图标空间仍然存在,即使偏好设置没有图标时也是如此。</li> |
| </ul> |
| |
| <p> |
| 新的微件: |
| </p> |
| |
| <ul> |
| <li>应用详细信息的标头微件。显示应用图标、应用标签等信息。</li> |
| <li>某些页面上具有展开按钮。页面在打开时可以是收起形式,隐藏不太重要的项目,直到用户点击展开按钮。</li> |
| <li>默认应用选择器界面: |
| <ul> |
| <li>该界面用于选择默认浏览器、默认手机应用等。</li> |
| <li>以前是一个对话框,现在是一个基于单选按钮的全屏界面。</li> |
| </ul> |
| </li><li>“MasterSwitch”样式偏好设置。这是具有两个点击目标的偏好设置。左侧目标会导致子集化的片段或 intent。右侧目标是一个切换开关,针对整个页面控制开启/关闭。</li> |
| </ul> |
| |
| <h2 id="examples-and-source">示例和源代码</h2> |
| <ul> |
| <li>分隔线行为 |
| <ul> |
| <li>“设置”中的所有页面均经过修改以使用新的分隔线行为。</li> |
| <li>分隔线行为在以下文件中定义为一个 ThemeOverlay:<br /> |
| <code>packages/apps/Settings/res/values/styles_preference.xml</code></li> |
| </ul> |
| </li> |
| <li>ActionBar 主题背景变化 |
| <ul> |
| <li>“设置”中的所有页面均经过修改以使用新的 ActionBar 主题背景。</li> |
| <li>主题背景在 Theme.DeviceDefault.Settings 中进行定义</li> |
| </ul> |
| </li> |
| <li>新的偏好设置布局 |
| <ul> |
| <li>现在,“设置”中的许多页面都使用新的偏好设置布局。</li> |
| <li>您可以在以下位置找到代码:<br /> |
| <code>packages/apps/Settings/res/values/styles_preference.xml</code></li> |
| </ul> |
| </li> |
| <li>应用标头微件 |
| <ul> |
| <li>“设置”中的大多数应用信息页面都已实现新的应用标头。</li> |
| <li>相关示例和代码可以在以下位置找到:<br /> |
| <code>packages/apps/Settings/src/com/android/settings/applications/AppHeaderController.java</code></li> |
| </ul> |
| </li> |
| <li>展开按钮 |
| <ul> |
| <li>相关示例和代码可以在以下位置找到:<br /> |
| <code>packages/apps/Settings/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java</code> |
| <p class="note"><strong>注意</strong>:此组件必须与 DashboardFragment 一起使用。(请在<a href="info-architecture.html">已更新的信息架构</a>中查看有关 DashboardFragment 的更多详情。)</p> |
| </li> |
| </ul> |
| </li><li>默认应用选择器 |
| <ul> |
| <li>您可以在以下位置找到基类的代码:<br /> |
| <code>packages/apps/Settings/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java</code> </li> |
| <li>DefaultAppPickerFragment 有多个子类,每个子类均实现一个选择器用于不同的 intent。</li> |
| </ul> |
| </li> |
| <li>MasterSwitch 样式偏好设置<em></em> |
| <ul> |
| <li>代码位于以下位置:<code>packages/apps/Settings/src/com/android/settings/widget/MasterSwitchPreference.java</code></li> |
| <li>WLAN 主开关就是一个示例用例。您可以在以下位置找到示例:<code>packages/apps/Settings/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java</code></li> |
| </ul> |
| </li> |
| </ul> |
| |
| <h2 id="implementation">实现</h2> |
| |
| <p> |
| 设备制造商可以开始使用所有新的组件,无需额外设置。如果原始设备制造商 (OEM) 决定实现新的“MasterSwitch”样式偏好设置或默认应用选择器,则应查看本文档中的示例以及为每个组件编写的参考文件 (Javadoc),以获取更多详细信息。 |
| </p> |
| |
| <h2 id="customizing">自定义</h2> |
| |
| <ul> |
| <li>分隔线行为。要更改分隔线的绘制方式,请更新“设置”分隔线的样式并更改以下各项的值: |
| <ul> |
| <li>allowDividerAbove</li> |
| <li>allowDividerBelow</li> |
| <li>allowDividerAfterLastItem</li> |
| </ul> |
| </li> |
| <li>ActionBar 主题背景颜色。Activity 应使用 <code>Theme.DeviceDefault.Settings</code> 作为其主题背景,或使用 <code>Theme.DeviceDefault.Settings</code> 作为父级创建自定义主题背景。 |
| </li> |
| <li>应用标头微件。在 AppHeaderController 中使用设置器来自定义每个字段,并在设置所有字段后调用 build()。 |
| </li> |
| <li>展开按钮: |
| <ul> |
| <li>要完全停用该功能,请替换 ProgressiveDisclosureMixin 的构造函数,并将 keepExpanded 设为 true。</li> |
| <li>要自定义最开始显示多少个项目,请在片段的 <code>onAttach(Context)</code> 方法中调用 <code>ProgressiveDisclosureMixin.setTileLimit()</code> 方法。</li> |
| </ul> |
| </li> |
| </ul> |
| |
| </body></html> |