blob: 13f72f1a526d3074ff36b8ea1010fc12f9bdade2 [file] [log] [blame]
<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>