diff options
Diffstat (limited to 'docs/html-intl/intl/zh-cn')
5 files changed, 1648 insertions, 0 deletions
diff --git a/docs/html-intl/intl/zh-cn/design/get-started/principles.jd b/docs/html-intl/intl/zh-cn/design/get-started/principles.jd new file mode 100644 index 0000000..fbb46c9 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/design/get-started/principles.jd @@ -0,0 +1,307 @@ +page.title=Android 设计原则 +@jd:body + +<p>以下设计原则由 Android用户体验团队秉承用户利益至上的理念而制定。他们还会继续为 Android 开发者和设计者针对不同类型的设备制定更详细的设计准则。 + + + +</p> + +<p> +在您应用自己的创意和设计思路时,请考虑这些原则, +切勿固执己见。 +</p> + +<h2 id="enchant-me">让我着迷</h2> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="delight-me">以意想不到的方式让我眼前一亮</h4> +<p>漂亮的界面、精心布置的动画,或恰到好处的声效,都会带来快乐的体验。 +精细的效果能产生一种轻松的氛围,让人感觉自己拥有强大的力量。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_delight.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="real-objects-more-fun">实际对象要比按钮和菜单更有趣</h4> +<p>让用户可以直接触摸和操作您应用中的对象,让执行任务更轻松,让用户更满意。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_real_objects.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="make-it-mine">我的应用我做主</h4> +<p>用户喜欢添加个性化手势,因为这样会让他们觉得更顺手并且一切尽在他们的掌控之中。提供感性、美观的默认手势,但也要考虑到趣味性,不要让可选的定制手势妨碍主要任务的操作。 + +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_make_it_mine.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="get-to-know-me">让应用了解我</h4> +<p>逐渐了解用户的偏好。不要让用户反复做出相同的选择,将之前的选择列作快捷选择。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_get_to_know_me.png"> + + </div> +</div> + +<h2 id="simplify-my-life">让我的生活更轻松</h2> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="keep-it-brief">语言简洁</h4> +<p>使用简单的字词组成简短的句子。用户往往会跳过冗长的句子。</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_keep_it_brief.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="pictures-faster-than-words">图片比文字更直观</h4> +<p>考虑以图示意。它们会吸引用户的注意力,并且比文字更高效。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_pictures.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="decide-for-me">为我决定,但最终由我做主</h4> +<p>先提供您心目中的最佳选择,而不是先进行询问。太多的选择和决策会让人不悦。 +只是在您的选择可能不当时,才赋予用户“撤消”的权利。</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_decide_for_me.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="only-show-when-i-need-it">仅在我需要时显示我所需要的</h4> +<p>如果一次性看到过多内容,用户会感到无所适从。将任务和信息细分为更小、更容易接受的片段。 +隐藏当前不必要的选项,并在用户操作期间提供指导。</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_information_when_need_it.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="always-know-where-i-am">我应该始终清楚自己在哪里</h4> +<p>让用户感到轻车熟路。为应用中的不同场景赋予不同的外观,使用过渡效果来展现屏幕之间的关系。 +提供任务进度反馈。</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_navigation.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="never-lose-my-stuff">决不能让我的成果付诸东流</h4> +<p>务必保存好用户耗费花时间创造的内容,让他们能随处访问这些内容。跨手机、平板电脑和计算机等平台,记住设置、个人手势和创作内容, +让应用升级变得无比简单。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_never_lose_stuff.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="looks-same-should-act-same">如果看上去一样,其行为也应当相同</h4> +<p>通过视觉上的显著差异(而不是微妙差异)帮助用户区分不同的功能。避免使用固定模式,那样会导致外观相似的场景中,用户执行同样的输入,应用却给出不同的响应。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_looks_same.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="interrupt-only-if-important">只在确实对我很重要时才打断我</h4> +<p>就像优秀的个人助理一样,不要让上司被一些无关紧要的琐事打扰。用户希望专注于核心任务,除非确实非常重要并且情况紧急,否则,打断用户会让人烦不胜烦。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_important_interruption.png"> + + </div> +</div> + +<h2 id="make-me-amazing">给我惊喜</h2> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="give-me-tricks">到处为我提供有用的诀窍</h4> +<p>如果能自己摸索出花样来,用户总是很开心的。利用直观的图案以及其他 Android 应用中常见的习惯手势,让您的应用更容易学习。 +例如,滑动手势就是一种不错的导航快捷手势。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_tricks.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="its-not-my-fault">不是我的错</h4> +<p>在提醒用户改正错误时要礼貌。他们希望在使用您的应用时感觉自己很聪明。如果用户操作出错,请提供清晰的恢复说明,而不要让他们咀嚼详细的技术信息。如果您能在后台修复错误,那当然更好。 + +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_error.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="sprinkle-encouragement">多多鼓励</h4> +<p>将复杂的任务分解为可轻松完成的小步骤。对操作提供反馈,哪怕只是微弱的灯光,也聊胜于无。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="do-heavy-lifting-for-me">为我处理繁重事务</h4> +<p>通过让新手完成他们认为自己不可能做到的事情,让他们感觉自己就像一名行家。例如,通过提供融合多种照片特效的快捷操作,只需几步,就可以让业余照片达到惊艳的效果。 + +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_heavy_lifting.png"> + + </div> +</div> + +<div class="vspace size-2"> </div> + +<div class="layout-content-row"> + <div class="layout-content-col span-7"> + +<h4 id="make-important-things-fast">让重要事项能更快地完成</h4> +<p>不是所有操作都同样重要。确定应用中哪些功能是最重要的,将这些功能放在便于找到和使用的地方,例如相机的快门按钮,或者音乐播放器中的暂停按钮。 +</p> + + </div> + <div class="layout-content-col span-6"> + + <img src="{@docRoot}design/media/principles_make_important_fast.png"> + + </div> +</div> diff --git a/docs/html-intl/intl/zh-cn/design/material/index.jd b/docs/html-intl/intl/zh-cn/design/material/index.jd new file mode 100644 index 0000000..78e6d38 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/design/material/index.jd @@ -0,0 +1,186 @@ +page.title=材料设计 +page.tags=Material, design +page.type=设计 +page.image=design/material/images/MaterialLight.png + +@jd:body + +<!-- developer docs box --> +<a class="notice-developers right" href="{@docRoot}training/material/index.html"> + <div> + <h3>开发者文档</h3> + <p>使用材料设计创建应用</p> + </div> +</a> + +<!-- video box --> +<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw"> +<div> + <h3>视频</h3> + <p>材料设计简介</p> +</div> +</a> + +<!-- video box --> +<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw"> +<div> + <h3>视频</h3> + <p>纸张和墨水:相关材料</p> +</div> +</a> + +<!-- video box --> +<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc"> +<div> + <h3>视频</h3> + <p>Google I/O 应用中的材料设计</p> +</div> +</a> + + + +<p itemprop="description">材料设计是专为设计适用于多个平台和设备的视觉、运动与互动效果而制定的综合指南。 +Android 现在已支持材料设计应用。 +如果要在您的 Android 应用中使用材料设计,请遵循<a href="http://www.google.com/design/spec">材料设计规范</a>内定义的指导方针,并使用 Android 5.0(API 级别 21)及以上版本所提供的新组件和功能。 + +</p> + +<p>Android 为您提供了以下元素来构建材料设计应用:</p> + +<ul> + <li>全新的风格主题</li> + <li>用于设计复杂视图的全新小工具</li> + <li>用于自定义阴影和动画的全新 API</li> +</ul> + +<p>有关在 Android 上实现材料设计的详细信息,请参阅<a href="{@docRoot}training/material/index.html">创建材料设计应用</a>。 +</p> + + +<h3>材料主题</h3> + +<p>材料主题提供了新的应用样式和系统小工具,让您能够为触摸反馈以及活动转换设置配色工具以及默认动画。 +</p> + +<!-- two columns --> +<div style="width:700px;margin-top:25px;margin-bottom:20px"> +<div style="float:left;width:250px;margin-left:40px;margin-right:60px;"> + <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" /> + <div style="width:140px;margin:0 auto"> + <p style="margin-top:8px">深色材料主题</p> + </div> +</div> +<div style="float:left;width:250px;margin-right:0px;"> + <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" /> + <div style="width:140px;margin:0 auto"> + <p style="margin-top:8px">浅色材料主题</p> + </div> +</div> +<br style="clear:left"/> +</div> + +<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/theme.html">使用材料主题 +</a>。</p> + + +<h3>列表和卡片</h3> + +<p>Android 提供了两个全新的小工具,用于显示采用材料设计样式和动画的卡片和列表: +</p> + +<!-- two columns --> +<div style="width:700px;margin-top:25px;margin-bottom:20px"> +<div style="float:left;width:250px;margin-left:40px;margin-right:60px;"> + <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" /> + <p>全新的 <code>RecyclerView</code> 小工具是 <code>ListView</code> + 的可插入版本,支持不同的布局类型,并且具有更高性能。</p> +</div> +<div style="float:left;width:250px;margin-right:0px;"> + <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" /> + <p>全新的 <code>CardView</code> 小工具可让您展示卡片内的重要信息,并且有统一的观感。 +</p> +</div> +<br style="clear:left"/> +</div> + +<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/lists-cards.html">创建列表和卡片</a>。 +</p> + + +<h3>视图阴影</h3> + +<p>除了 X 和 Y 属性之外,Android 中的视图现在还提供了 Z +属性。这一新属性用于展现视图的高度,从而确定:</p> + +<ul> +<li>阴影的大小:Z 值越高的视图投射的阴影越长。</li> +<li>绘制顺序:Z 值较高的视图会显示在其他视图的上方。</li> +</ul> + +<div style="width:290px;margin-left:35px;float:right"> + <div class="framed-nexus5-port-span-5"> + <video class="play-on-hover" autoplay> + <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/> + <source src="{@docRoot}design/videos/ContactsAnim.webm"/> + <source src="{@docRoot}design/videos/ContactsAnim.ogv"/> + </video> + </div> + <div style="font-size:10pt;margin-left:20px;margin-bottom:30px"> + <em>如果要重新播放影片,请点击设备屏幕</em> + </div> +</div> + +<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/shadows-clipping.html">定义阴影与裁剪视图</a>。 +</p> + + +<h3>动画</h3> + +<p>动画 API 让您可为 UI 控件中的触摸反馈、视图状态更改以及活动转换创建自定义动画。 +</p> + +<p>这些 API 的作用是:</p> + +<ul> +<li style="margin-bottom:15px"> +使用<strong>触摸反馈</strong>动画响应视图中的触摸事件。 +</li> +<li style="margin-bottom:15px"> +使用<strong>循环显示</strong>动画隐藏和显示视图。 +</li> +<li style="margin-bottom:15px"> +使用自定义<strong>活动转换</strong>动画切换活动。 +</li> +<li style="margin-bottom:15px"> +使用<strong>曲线运动</strong>创建更自然的动画。 +</li> +<li style="margin-bottom:15px"> +使用<strong>视图状态更改</strong>动画以动画形式呈现一个或多个视图属性的更改。 +</li> +<li style="margin-bottom:15px"> +在视图状态更改期间以<strong>可绘制状态列表</strong>显示动画。 +</li> +</ul> + +<p>触摸反馈动画内建于数个标准视图(例如按钮)中。全新的 API让您可以自定义这些动画并将其添加至自己的自定义视图中。 +</p> + +<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/animations.html">定义自定义动画</a>。 +</p> + + +<h3>可绘制对象</h3> + +<p>下列可绘制对象的新功能将帮助您实现材料设计应用:</p> + +<ul> +<li><strong>可绘制矢量</strong>可在不影响清晰度的情况下进行缩放,非常适合单色应用内图标。 +</li> +<li><strong>可绘制底色</strong>可让您将位图定义为 alpha 蒙板,并在运行时为其着色。 +</li> +<li><strong>颜色提取</strong>可让您从位图图像自动提取突出色彩。 +</li> +</ul> + +<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/drawables.html">使用可绘制内容</a>。 +</p> diff --git a/docs/html-intl/intl/zh-cn/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/zh-cn/design/patterns/confirming-acknowledging.jd new file mode 100644 index 0000000..aa4ae1f --- /dev/null +++ b/docs/html-intl/intl/zh-cn/design/patterns/confirming-acknowledging.jd @@ -0,0 +1,70 @@ +page.title=确认和确知 +page.tags=dialog,toast,notification +@jd:body + +<p>在某些情况下,当用户在您的应用中调用某个操作时,最好使用文字内容来<em>确认</em>或<em>确知</em>该操作。</p> + +<div class="layout-content-row"> + <div class="layout-content-col span-6"> + <img src="{@docRoot}design/media/confirm_ack_confirming.png"> + <p><strong>确认</strong>是要求用户确认自己确实希望执行刚才所调用的操作。在某些情况下,确认随需要用户考虑的操作所相关的警告或关键信息一起显示。</p> + </div> + <div class="layout-content-col span-6"> + <img src="{@docRoot}design/media/confirm_ack_acknowledge.png"> + <p><strong>确知</strong>就是显示一段文字信息,让用户知道自己刚才调用的操作已经完成。这将消除系统正在执行的隐式操作的不确定性。在某些情况下,确知随撤消操作的选项一起显示。</p> + </div> +</div> + +<p>以上述方式通知用户有助于减少用户对已发生或即将发生的事情的不确定性。确认或确知还可以有效防止用户犯下可能让自己后悔的错误。</p> + +<h2>何时需要确认或确知用户操作</h2> +<p>并非所有操作都一定要确认或确知。请使用以下流程图指导自己的设计决策。</p> +<img src="{@docRoot}design/media/confirm_ack_flowchart.png"> + +<h2>确认</h2> +<div class="layout-content-row"> + <div class="layout-content-col span-6"> + <h4>示例:Google Play 书籍</h4> + <img src="{@docRoot}design/media/confirm_ack_ex_books.png"> + <p>在该示例中,用户要求从其 Google Play 书架中删除一本书。系统显示了一条<a href="{@docRoot}design/building-blocks/dialogs.html#alerts">警告</a>来要求确认该操作,因为用户必须知道,一旦删除,该书籍将无法继续在任何设备上使用。</p> + <p>在设计确认对话框时,请使用反映所请求操作的文字作为标题,使标题更有意义。</p> + </div> + <div class="layout-content-col span-7"> + <h4>示例:Android Beam</h4> + <img src="{@docRoot}design/media/confirm_ack_ex_beam.png"> + <p>确认不一定要显示在有两个按钮的警告中。在启动 Android Beam 后,系统提示用户触摸要分享的内容(本例中是一张照片)。如果他们决定不继续操作,只需移开手机即可。</p> + </div> +</div> + +<h2>确知</h2> +<div class="layout-content-row"> + <div class="layout-content-col span-6"> + <h4>示例:已保存中断的 Gmail 草稿</h4> + <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png"> + <p>在本例中,如果用户在 Gmail 撰写邮件屏幕中向后或向上导航,可能会发生一些意外情况,此时会自动保存当前草稿。Toast 形式的确知会明确告知这一点。它会在几秒钟后消失。</p> + <p>在这种情况下不能执行撤消操作,因为保存是由应用发起的,而不是由用户执行的。通过导航至草稿列表,可迅速方便地恢复邮件。</p> + + </div> + <div class="layout-content-col span-6"> + <h4>示例:已删除 Gmail 会话</h4> + <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png"> + <p>在用户从 Gmail 中的列表删除某个会话后,会出现带撤消选项的确知。确知消息会一直等到用户采取无关操作才会消失,例如滚动列表。</p> + </div> +</div> + +<h2>无需确认或确知</h2> +<div class="layout-content-row"> + <div class="layout-content-col span-6"> + <h4>示例:+1 操作</h4> + <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png"> + <p><strong>无需确认</strong>。如果用户意外触摸 +1 按钮,不会有什么大问题。他们只需再次触摸该按钮,撤消该操作即可。</p> + <p><strong>无需确知</strong>。用户将看到 +1 按钮弹起并变红。这是非常明确的信号。</p> + </div> + <div class="layout-content-col span-7"> + <h4>示例:从主屏幕删除应用</h4> + <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png"> + <p><strong>无需确认</strong>。这属于有意操作:用户必须将项目拖放到相对较大并且独立的目标上。因此,很难发生意外。但是如果用户反悔决定,只需数秒钟时间即可复原。</p> + <p><strong>无需确知</strong>。用户知道该应用会从主屏幕上消失,因为是他们将其拖走而使其消失的。</p> + + </div> +</div> diff --git a/docs/html-intl/intl/zh-cn/design/patterns/navigation.jd b/docs/html-intl/intl/zh-cn/design/patterns/navigation.jd new file mode 100644 index 0000000..339a2c5 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/design/patterns/navigation.jd @@ -0,0 +1,213 @@ +page.title=使用返回和向上导航 +page.tags="navigation","activity","task","up navigation","back navigation" +page.image=/design/media/navigation_between_siblings_gmail.png +@jd:body + +<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html"> + <div> + <h3>开发者文档</h3> + <p>实现有效导航</p> + </div> +</a> + +<p itemprop="description">一致的导航操作是整体用户体验的重要组成部分。如果基本的导航方法都不能保持一致,甚至让用户意想不到的话,恐怕没有比这更让人沮丧的事情了。 +Android 3.0对全局导航行为做出了重大改变。 +对用户来说,认真遵照“返回”和“向上”的指导准则可让应用的导航更可靠、更符合预期。 +</p> +<p>Android 2.3 及更早的版本使用<em>返回</em>按钮来支持应用内的导航。在 Android 3.0 中引入操作栏后,出现了第二种导航机制:即<em>向上</em>按钮,由应用图标和左向箭头构成。 + +</p> + +<img src="{@docRoot}design/media/navigation_with_back_and_up.png"> + +<h2 id="up-vs-back">向上和返回</h2> + +<p>“向上”按钮用于根据屏幕之间的层级关系在应用中导航。 +例如,如果屏幕 A 显示项目列表,并且选择某个项目会调出屏幕 B(该屏幕显示项目的更多详情),则屏幕 B 应提供可返回屏幕 A 的“向上”按钮。 + +</p> +<p>如果屏幕是应用中层级最高的屏幕(即应用的主屏幕),则无需提供向上按钮。 +</p> + +<p>系统的“返回”按钮用于按照用户最近操作的屏幕历史记录,按时间逆序导航。 +它通常基于屏幕之间的时间关系,而非应用的层级关系。 +</p> + +<p>如果之前查看的屏幕也是当前屏幕的父级项,按下“返回”按钮的作用跟按下“向上”按钮一样 — 这种情况很常见。 + +但是,“向上”按钮可确保用户留在应用内,与此不同的是,“返回”按钮可让用户返回到主屏幕,甚至返回不同的应用。 +</p> + +<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png"> + +<p>“返回”按钮还支持与屏幕间导航并无直接关联的一些行为: +</p> +<ul> +<li>清除浮动窗口(对话框、弹出窗口)</li> +<li>清除上下文操作栏,并取消高亮显示所选项目</li> +<li>隐藏屏幕键盘 (IME)</li> +</ul> +<h2 id="within-app">应用内导航</h2> + +<h4>通过多个入口点导航屏幕</h4> +<p>有时,某个屏幕在应用层级中的位置并不固定,可以从多个入口点抵达 — 例如可从应用中的其他任何屏幕抵达设置屏幕。在这种情况下,选择“向上”按钮会返回到引用屏幕,其行为跟“返回”按钮相同。 + + +</p> +<h4>更改屏幕中的视图</h4> +<p>更改屏幕的视图选项不会更改“向上”或“返回”的行为:屏幕仍然位于应用层级中的同一位置,并且不会创建新的导航历史记录。 +</p> +<p>此类视图更改的示例包括:</p> +<ul> +<li>使用选项卡和/或左右滑动切换视图</li> +<li>使用下拉菜单(即折叠的选项卡)切换视图</li> +<li>筛选列表</li> +<li>列表排序</li> +<li>更改显示特性(例如缩放)</li> +</ul> +<h4>在同级屏幕之间导航</h4> +<p>如果您的应用支持从项目列表导航至其中某个项目的详情视图,通常最好支持从该项目导航到列表中该项目之前或之后的另一项目。 + +例如,在 Gmail 中,只需在会话中向左或向右滑动,即可轻松查看同一收件箱中较新或较旧的会话。 +在某个屏幕内更改视图这样的导航不会改变“向上”或“返回”的行为。 +</p> + +<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png"> + +<p>然而,当在多个彼此相关、但并未通过引用列表绑定在一起的详情视图之间浏览时,例如,在 Play 商店中同一开发商开发的多款应用或者同一艺术家推出的多张专辑之间切换浏览时,会发生值得注意的例外情况。 + +在这些情况下,跟踪每个链接不会创建历史记录,这就导致点击“返回”按钮时会逐一显示之前查看过的每个屏幕。 +点击“向上”按钮则会直接绕过这些相关的屏幕并导航至最近查看的容器屏幕。 +</p> + +<img src="{@docRoot}design/media/navigation_between_siblings_market1.png"> + +<p>您可以根据详情视图的实际情况让“向上”按钮的行为更加智能。 +将上述 Play 商店示例进一步展开,设想用户从查看过的上一本图书导航至电影改编详情。 +在这种情况下,“向上”按钮可返回至用户之前导航时未经历过的容器(电影)。 +</p> + +<img src="{@docRoot}design/media/navigation_between_siblings_market2.png"> + +<h2 id="into-your-app">通过主屏幕小工具和通知进入您的应用</h2> + +<p>使用主屏幕小工具或通知,您可以帮助用户直接导航至应用中的深层屏幕。 +例如,Gmail 的收件箱小工具和新消息通知都可绕过收件箱屏幕,让用户直接进入会话视图。 +</p> + +<p>对于这两种情况,请按下述说明处理“向上”按钮:</p> + +<ul> +<li><em>如果目的屏幕通常通过应用</em>中的某个特定屏幕抵达,“向上”按钮应导航至该屏幕。 +</li> +<li><em>否则</em>,“向上”按钮应导航至应用的顶级屏幕(“主屏幕”)。</li> +</ul> + +<p>对于“返回”按钮,您应将指向应用顶级屏幕的完整向上导航路径插入到任务的返回栈,从而让导航更具预见性。 +这样,如果用户忘记了之前是如何进入您的应用的,则可以在退出之前导航至应用的顶级屏幕。 + +</p> + +<p>例如,Gmail 的主屏幕小工具有一个按钮可以让您直接进入写邮件屏幕。 +在写邮件屏幕上使用“向上”或“返回”可让用户进入“收件箱”,而在收件箱屏幕上使用“返回”则可回到主屏幕。 +</p> + +<img src="{@docRoot}design/media/navigation_from_outside_back.png"> + +<h4>间接通知</h4> + +<p>如果您的应用需要同时提供关于多个事件的信息,可使用一条通知将用户引导至某个间隙屏幕。 +该屏幕将这些事件汇总,并为用户提供深度导航应用的路径。这种样式的通知称为<em>间接通知</em>。 + +</p> + +<p>与标准(直接)通知不同,在间接通知的间隙屏幕上按下“返回”会让用户回到触发通知的点 — 不会在返回栈中插入额外的屏幕。 + +一旦用户从应用的间隙屏幕进入应用的更深层级,则“向上”和“返回”按钮的行为就与用于标准通知时相同,如上所述:在应用内部导航,而非返回至间隙屏幕。 + +</p> + +<p>例如,假设 Gmail 中的用户收到来自日历的间接通知。触摸该通知会打开间隙屏幕,该屏幕会显示数个不同事件的提醒。 + +在间隙屏幕上触摸“返回”会让用户回到 Gmail。触摸特定事件会让用户离开间隙屏幕并进入完整的日历应用,以显示事件的详情。 + +在事件详情屏幕上,使用“向上”和“返回”可导航至日历的顶级视图。</p> + +<img src="{@docRoot}design/media/navigation_indirect_notification.png"> + +<h4>弹出通知</h4> + +<p><em>弹出通知</em>会绕过抽屉式通知栏,直接显示在用户面前。 +一般很少使用这种通知,<strong>仅在需要即时响应并且有必要中断用户当前操作时使用</strong>。 +例如,Talk 使用这种方式来提醒用户收到了好友加入视频聊天的邀请,因为该邀请将在几秒之后自动过期。 + +</p> + +<p>从导航行为的角度来看,弹出通知会密切跟踪间接通知的间隙屏幕的行为。 +使用“返回”会清除弹出通知。如果用户从弹出通知导航至通知应用中,则“向上”和“返回”会依照标准通知的规则在应用内导航。 + +</p> + +<img src="{@docRoot}design/media/navigation_popup_notification.png"> + +<h2 id="between-apps">在应用之间导航</h2> + +<p>Android 系统的一个基本优势在于能够让应用相互激活,这样用户就可以直接从一个应用导航到另一个应用。 +例如,需要获取照片的应用可激活相机应用,后者可将照片返回给前者。这对于开发者和用户来说都极为有利,开发者可以方便地利用来自其他应用的代码,而用户则在执行常用操作时可以获得一致的体验。 + + + +</p> + +<p>为了理解应用到应用的导航,必须理解下面探讨的 Android 框架行为 +。</p> + +<h4>活动、任务和意向</h4> + +<p>在 Android 中,<strong>活动</strong>是一个应用组件,用于定义信息屏幕以及用户可执行的所有相关操作。 +您的应用是活动的集合,由您创建的活动以及从其他应用重用的活动构成。 +</p> + +<p><strong>任务</strong>是用户为达成某个目标而执行的活动序列。一个 +任务可以只利用一个应用的活动,也可以利用来自多个不同应用的活动。 +</p> + +<p><strong>意向</strong>是应用的一种机制,用于发出信号以表明需要另一个应用的辅助才能执行某个操作。 +应用的活动可指示其可响应哪些意向。 +对于诸如“分享”这样的常用意向,用户可能安装有许多可执行该请求的应用。 +</p> + +<h4>示例:在应用之间导航以支持分享</h4> + +<p>要了解如何结合使用活动、任务和意向,可以考虑一个应用如何让用户通过使用另一应用来分享内容的例子。例如,从主屏幕启动 Play 商店应用可启动新任务 A(参见下图)。 + +在 Play 商店中导航并触摸某本促销图书来查看其详情之后,用户会停留在该任务中并通过添加活动来扩展该任务。 +触发“分享”操作会通过一个对话框来提示用户选择活动,该对话框中会列出来自不同应用、之前已注册用于处理“分享”意向的每一种活动。 + +</p> + +<img src="{@docRoot}design/media/navigation_between_apps_inward.png"> + +<p>如果用户选择通过 Gmail 分享,则会以延续任务 A 的形式添加 Gmail 的写邮件活动 — 而不会创建新任务。 +如果 Gmail 在后台还运行有自己的任务,该任务不会受影响。 +</p> + +<p>在写邮件活动中,发送邮件或触摸“返回”按钮会让用户回到图书详情活动。 +之后继续触摸“返回”会在 Play 商店中继续回退,直至抵达主屏幕。 +</p> + +<img src="{@docRoot}design/media/navigation_between_apps_back.png"> + +<p>尽管如此,用户可通过在写邮件活动中触摸“向上”按钮表明其希望留在 Gmail 中。 +此时会显示 Gmail 的会话列表活动,并为其创建新任务 B。新任务都始于主屏幕,因此从会话列表触摸“返回”按钮,始终会回到主屏幕。 +</p> + +<img src="{@docRoot}design/media/navigation_between_apps_up.png"> + +<p>任务 A 保持在后台运行,用户可稍后回到该任务(例如通过“最近使用的应用”屏幕)。 +如果 Gmail 在后台还运行有自己的任务,该任务会被任务 B 取代 — 之前的上下文会被丢弃,以使用户达成新目标。 +</p> + +<p>如果您的应用经过注册,以使用应用中的深层活动来处理意向,可参阅<a href="#into-your-app">通过主屏幕小工具和通知进入您的应用</a>,获得有关如何指定“向上”导航行为的指导。 + +</p> diff --git a/docs/html-intl/intl/zh-cn/design/patterns/notifications.jd b/docs/html-intl/intl/zh-cn/design/patterns/notifications.jd new file mode 100644 index 0000000..57e02e4 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/design/patterns/notifications.jd @@ -0,0 +1,872 @@ +page.title=通知 +page.tags="notifications","design","L" +@jd:body + + <a class="notice-developers" href="{@docRoot}training/notify-user/index.html"> + <div> + <h3>开发者文档</h3> + <p>通知用户</p> + </div> +</a> + +<a class="notice-designers" href="notifications_k.html"> + <div> + <h3>Android 4.4 及更低版本中的通知</h3> + </div> +</a> + +<!-- video box --> +<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY"> +<div> + <h3>视频</h3> + <p>DevBytes:Android L 开发者预览当中的通知</p> +</div> +</a> + +<style> + .col-5, .col-6, .col-7 { + margin-left:0px; + } +</style> + +<p>通知系统可让用户随时了解应用中的相关和即时事件,例如来自好友的新聊天信息或日历事件。可将通知视作新闻频道,在重要的事件发生时提醒用户注意,或者当作日志,在用户未注意时记录事件—可在用户的所有 Android 设备上按需同步。 + + + + + +</p> + +<h4 id="New"><strong>Android 5.0 新增内容</strong></h4> + +<p>在 Android 5.0 中,通知在结构、外观和功能方面获得了重要的更新: +</p> + +<ul> + <li>通知在外观上发生了更改,与新的材料设计主题保持一致。 +</li> + <li> 通知现在可以在设备锁定屏幕上使用,而敏感信息仍然可以隐藏于背后。 + +</li> + <li>设备在使用时收到的高优先级通知现在采用名为浮动通知的新格式。 +</li> + <li>云同步通知:在一台 Android 设备上清除通知,则在其他设备上也会将其清除。 + +</li> +</ul> + +<p class="note"><strong>注:</strong>该版本 Android 的通知设计与之前的版本大不相同。 + +有关之前版本通知设计的信息,请参阅<a href="./notifications_k.html"> Android 4.4 及更低版本中的通知</a>。 +</p> + +<h2 id="Anatomy">通知详解</h2> + +<p>本部分介绍通知的基本组成部分,及其在不同类型设备上显示的方式。 +</p> + +<h3 id="BaseLayout">基本布局</h3> + +<p>所有通知至少要包括一个基本布局,包括:</p> + +<ul> + <li> 通知的<strong>图标</strong>。图标以符号形式表示来源应用。如果应用生成多个类型的通知,它也可用于指明通知类型。 + + +</li> + <li> 通知<strong>标题</strong>以及其他 +<strong>文本</strong>。</li> + <li> <strong>时间戳</strong>。</li> +</ul> + +<p>利用 {@link android.app.Notification.Builder Notification.Builder}为之前版本平台创建的通知,其外观和行为方式与在 Android +5.0 中完全相同,唯一的变动在于系统为您处理通知的方式存在细微的样式变动。 + +如需了解之前 Android 版本通知设计的详细信息,请参阅<a href="./notifications_k.html"> Android 4.4 及更低版本中的通知</a>。 + +</p></p> + + + <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" /> + + +<div style="clear:both;margin-top:20px"> + <p class="img-caption"> + 手持设备通知(左)和穿戴设备(右)上同一通知的基本布局,带有用户照片和通知图标 + + </p> + </div> + +<h3 id="ExpandedLayouts">展开布局</h3> + + +<p>您可以选择让应用的通知提供多少信息详情。 +它们可显示消息的前几行,也可以显示更大的预览图像。 +额外的信息可以为用户提供更多上下文,并且,在某些情况下,可能允许用户完整阅读消息。 + + +用户可进行两指缩放或执行单指滑移,在紧凑和展开布局之间切换。 + + + 对于单一事件通知,Android 提供了三种展开布局模板(文本、收件箱和图像),供您在应用中使用。 + +下图展示单一事件通知在手持设备(左)和穿戴式设备(右)上的外观。 + +</p> + +<img style="margin-top:30px" +src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png" + alt="" width="700px" height;="284px" /> +<img style="margin-top:30px" +src="{@docRoot}images/android-5.0/notifications/stack_combo.png" + alt="" width="700px" height;="284px" /> +<img style="margin-top:30px" +src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png" + alt="" width="311px" height;="450px" /> + +<h3 id="actions" style="clear:both; margin-top:40px">操作</h3> + +<p>Android 支持在通知底部显示可选的操作。通过操作,用户可在通知栏中处理最常见的任务,而无需打开来源应用。这样可加快交互的速度,而通过结合使用滑动清除通知的功能,有助于用户专注于对自身重要的通知。 + + + + + +</p> + + + <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" /> + + + +<p style="clear:both">请慎重考虑要在通知中包含多少操作。 +您加入的操作越多,用户就越无所适从。 +请通过只包含最重要且有意义的操作,尽量减少通知中的操作数量。 + + +</p> + +<p>适合在通知中使用的操作具有如下特点:</p> + +<ul> + <li> 对正在显示的内容类型必要、常用且常见 + + <li> 让用户可以迅速完成任务 +</ul> + +<p>避免以下类型的操作:</p> + +<ul> + <li> 含义模糊 + <li> 跟通知的默认操作一样(例如“阅读”或“打开”) + +</ul> + + + +<p>您最多可以指定三个操作,每个操作由操作图标和名称组成。 + + 通过为简单的基本布局添加操作,可以展开该通知,即使该通知没有展开布局,此方法仍然有效。 + +由于操作仅对展开的通知显示(否则会隐藏),因此要确保用户从通知调用的任何操作都可在相关联的应用中使用。 + + + + +</p> + +<h2 style="clear:left">浮动通知</h2> +<div class="figure" style="width:311px"> + <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" /> + <p class="img-caption"> + 出现在沉浸式应用顶部的浮动通知(手机来电,高优先级)示例 + + + </p> +</div> + +<p>收到高优先级通知时(见右侧),它会向用户短时间显示一个包含可选操作的展开布局。 + +</p> +<p> 之后,通知会缩回通知栏。 +如果通知的<a href="#correctly_set_and_manage_notification_priority">优先级</a>标志为高、最大或全屏,则会得到浮动通知。 +</p> + +<p><b>浮动通知的范例</b></p> + +<ul> + <li> 使用设备时来电</li> + <li> 使用设备时闹铃</li> + <li> 新的短信</li> + <li> 电池电量过低</li> +</ul> + +<h2 style="clear:both" id="guidelines">指导原则</h2> + + +<h3 id="MakeItPersonal">个人化</h3> + +<p>对于他人发送的项目通知(例如消息或状态更新),请使用 +{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()} 包含此人的头像。 +另外将有关此人的信息附加到通知的元数据(参阅 {@link android.app.Notification#EXTRA_PEOPLE})。 +</p> + +<p>您通知的主图标仍然会显示,因此,该用户可将其与状态栏中显示的图标相关联。 + +</p> + + +<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" /> +<p style="margin-top:10px" class="img-caption"> + 显示触发通知的用户以及该用户所发送信息的通知。 +</p> + + +<h3 id="navigate_to_the_right_place">导航至正确位置</h3> + +<p>在用户触摸通知的正文时(在操作按钮的外面),打开应用并定位至正确的位置,以便用户可查看通知中引用的数据并据此操作。 + + +在大多数情况下,该位置是某个数据项目(例如消息)的详情视图,但如果是存档通知,那么也可能是摘要视图。 + +如果您的应用将用户带到应用顶层以下的任何位置,可将导航插入应用的返回栈,这样用户就可以通过按下系统返回按钮返回至顶层。 + +如需了解详细信息,请参阅<a href="{@docRoot}design/patterns/navigation.html#into-your-app">导航</a>设计模式中的“通过主屏幕小工具和通知进入您的应用”<em></em>。 + +</p> + +<h3 id="correctly_set_and_manage_notification_priority">正确设置和管理通知优先级。 + +</h3> + +<p>Android 支持通知的优先级标志。该标志可以影响您的通知相对于其他通知出现的位置,并且可以帮助确保用户始终能在第一时间看到对他们最重要的通知。 + + +在发布通知时,您可以选择下列优先级之一: + +</p> +<table> + <tr> + <td class="tab0"> +<p><strong>优先级</strong></p> +</td> + <td class="tab0"> +<p><strong>用法</strong></p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>MAX</code></p> +</td> + <td class="tab1"> +<p>用于重要和紧急的通知,告知用户属于时间关键型状况,或者必须予以解决方可继续执行某个特定任务。 + + +</p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>HIGH</code></p> +</td> + <td class="tab1"> +<p>主要用于重要通信,例如包含用户特别感兴趣的内容的消息或聊天事件。高优先级通知会触发浮动通知显示。 + +</p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>DEFAULT</code></p> +</td> + <td class="tab1"> +<p>用于不属于此处所述其他任何优先级的所有通知。</p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>LOW</code></p> +</td> + <td class="tab1"> +<p>用于您希望告知用户但不是很紧急的通知。 +低优先级通知最好显示在列表的底部,这里正适合放置公共事项或无收件人姓名的社交更新之类的通知: + +用户要求接收相关通知,但是这些通知的优先级永远不会高于紧急或直接通信。 + + +</p> +</td> + </tr> + <tr> + <td class="tab1"> +<p><code>MIN</code></p> +</td> + <td class="tab1"> +<p>用于上下文或背景信息,例如天气信息或上下文位置信息。最低优先级通知不会出现在状态栏中。 + +用户可在展开的通知栏上找到它们。 +</p> +</td> + </tr> +</table> + + +<h4 id="how_to_choose_an_appropriate_priority"><strong>如何选择合适的优先级</strong> + +</h4> + +<p><code>DEFAULT</code>、<code>HIGH</code> 和 <code>MAX</code> 是中断优先级别,在活动过程中有中断用户的风险。 + +为了避免打扰应用的用户,中断优先级仅保留用于以下通知 +:</p> + +<ul> + <li> 涉及另一个用户</li> + <li> 时间敏感</li> + <li> 可能会立即改变用户在现实世界中的行为</li> +</ul> + +<p>设置为 <code>LOW</code> 和 <code>MIN</code> 的通知可能仍然对用户很重要: +很多通知(如果不是绝大多数)不需要用户立即注意,也不需要振动,但仍然包含用户选择查看通知时将会觉得重要的信息。 + + +<code>LOW</code> 和 <code>MIN</code>优先级通知的条件包括: +</p> + +<ul> + <li> 不涉及其他用户</li> + <li> 不属于时间敏感型</li> + <li> 包含用户可能感兴趣但可选择在空闲时浏览的内容 +</li> +</ul> + + + <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" /> + + +<h3 style="clear:both" id="set_a_notification_category">设置通知类别 +</h3> + +<p>如果通知属于以下预定义类别(参阅下文)之一,则为其分配相应的类别。 + +诸如通知栏(或其他任何通知侦听器)这样的系统 UI 项目,可使用该信息来进行评级和筛选决策。 + +</p> +<table> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p> +</td> + <td> +<p>来电(语音或视频)或相似的同步通信请求 +</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p> +</td> + <td> +<p>传入的直接消息(短信、即时消息等)</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p> +</td> + <td> +<p>异步群发消息(电子邮件)</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p> +</td> + <td> +<p>日历事件</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p> +</td> + <td> +<p>促销或广告</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p> +</td> + <td> +<p>闹铃或定时器</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p> +</td> + <td> +<p>长时间运行的后台操作的进度</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p> +</td> + <td> +<p>社交网络或共享更新</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p> +</td> + <td> +<p>后台操作或身份验证状态中的错误</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p> +</td> + <td> +<p>媒体传输播放控制</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p> +</td> + <td> +<p>系统或设备状态更新。保留给系统使用。</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p> +</td> + <td> +<p>正在运行的后台服务的指示</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p> +</td> + <td> +<p>对于某个事件的特定、及时建议。例如,新闻应用可能会建议用户接下来可能想要阅读的新话题。 + +</p> +</td> + </tr> + <tr> + <td> +<p><code><a +href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p> +</td> + <td> +<p>有关设备或上下文状态的持续信息</p> +</td> + </tr> +</table> + +<h3 id="summarize_your_notifications">通知摘要</h3> + +<p>如果特定类型的通知已经在您的应用尝试发送同类型的新通知时挂起,可将它们合并到单个应用摘要通知中,而不要新建对象。 + +</p> + +<p>摘要通知会生成摘要说明,让用户了解特定类型的通知有多少处于挂起状态。 + +</p> + +<div class="col-6"> + +<p><strong>禁忌用法</strong></p> + <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" /> +</div> + +<div> +<p><strong>建议用法</strong></p> + + <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" /> +</div> + +<p style="clear:left; padding-top:30px; padding-bottom:20px">您可通过使用展开的摘要布局提供有关组成摘要的各个通知的更多详情。 + +此方法可让用户更好地了解哪些通知处于挂起状态,如果他们有足够的兴趣,还可在相关联的应用中阅读详情。 + + + +</p> +<div class="col-6"> + <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" /> + <p class="img-caption"> + 展开和收起的摘要通知(使用 <code>InboxStyle</code>) + </p> +</div> + +<h3 style="clear:both" id="make_notifications_optional">将通知设置为可选 +</h3> + +<p>用户应始终能控制通知。允许用户通过将某个通知设置项目添加至您的应用设置,禁用应用的通知或更改其提醒属性,例如警报声和是否使用振动。 + + + +</p> + +<h3 id="use_distinct_icons">使用不同的图标</h3> +<p>通过扫一眼通知区域,用户可以了解哪些类型的通知当前处于挂起状态。 + +</p> + +<div class="figure"> + <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" /> +</div> + + <div><p><strong>建议用法</strong></p> + <p>查看 Android 应用已经提供的通知图标并为您的应用创建外观明显不同的通知图标。 + +</p> + + <p><strong>建议用法</strong></p> + <p>对小图标使用正确的<a href="/design/style/iconography.html#notification">通知图标样式</a>,对操作图标使用相应的材料灯<a href="/design/style/iconography.html#action-bar">操作栏图标</a>。 + + + +</p> +<p ><strong>建议用法</strong></p> +<p >图标外观要简洁清晰,避免使用过于精细、难以辨认的图标。 +</p> + + <div><p><strong>禁忌用法</strong></p> + <p>对小图标和操作图标设置任何附加的阿尔法通道属性(变暗或变淡);这些图标会有抗锯齿边缘,但是由于 Android 使用这些图标作为蒙板(即仅使用阿尔法通道),因此通常应以完全不透明的方式绘制图像。 + + + + +</p> + +</div> +<p style="clear:both"><strong>禁忌用法</strong></p> + +<p>利用色彩将您的应用与其他应用区分开来。通知图标应该是纯白透明背景图像。 +</p> + + +<h3 id="pulse_the_notification_led_appropriately">对通知 LED 施加相应的脉冲 +</h3> + +<p>许多 Android 设备都配有通知 LED,用于让用户在屏幕关闭时了解事件。 + +优先级为 <code>MAX</code>、 +<code>HIGH</code> 或 <code>DEFAULT</code> 的通知应让 LED 发光,而优先级较低的通知(<code>LOW</code> 和 <code>MIN</code>)则不应让 LED 发光。 + +</p> + +<p>用户对通知的控制应延伸至 LED。当您使用 DEFAULT_LIGHTS 时,LED 将发出白光。 + +您的通知不应使用不同的颜色,除非用户明确对其进行了自定义。 + +</p> + +<h2 id="building_notifications_that_users_care_about">构建用户关注的通知 +</h2> + +<p>要创建用户喜爱的应用,精心设计通知很重要。通知是应用的代言人,还可增强应用的个性化特征。 + + +无用或者不重要的通知会给用户带来烦恼,或者由于过分分散用户的注意力而使其感到愤怒,因此请谨慎使用通知。 + + +</p> + +<h3 id="when_to_display_a_notification">何时显示通知</h3> + +<p>要创建人们乐于使用的应用,就需要认识到用户的注意力和关注点是一种必须予以保护的资源,这一点很重要。 + +尽管 Android 的通知系统在设计上希望最小化通知对用户注意力的影响,但是仍然要重视通知会中断用户任务流程这一事实。在您计划通知时,要问问自己,它们是否足够重要,是否适合让用户中断手上的任务。 + + + + + + +如果您不确定,可允许用户使用应用的通知设置来选择是否接收通知,或者将通知优先级标志调整为 <code>LOW</code> 或 <code>MIN</code>,从而避免在用户做其他事情时分散他们的注意力。 + + + +</p> + + <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" /> + <p style="margin-top:10px" class="img-caption"> + 时间敏感通知的示例 + </p> + +<p>尽管行为良好的应用通常只在用户对其操作后才会发出通知,但在极少数情况下,应用通过无提示的通知形式打断用户也是值得的。 +</p> + +<p>将通知主要用于<strong>时间敏感的事件</strong>,尤其是这些同步事件<strong>涉及其他用户时</strong>。 +例如,传入的聊天属于实时同步通信形式: + +另一个用户在主动等待您的回应。 +日历事件是使用通知并引起用户注意的另一个好例子,因为事件已经迫近,并且日历事件通常涉及其他人员。 + + +</p> + +<h3 style="clear:both" id="when_not_to_display_a_notification">何时不显示通知 +</h3> + +<div class="figure" style="margin-top:60px"> + <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" /> +</div> + +<p>在其他很多情况下都不适合显示通知:</p> + +<ul> + <li> 不要将并非特定于用户的信息或并非确实时间敏感的信息告知用户。 + +例如,流经社交网络的异步和未经订阅的更新,通常不适合引发实时中断。 + + +对于确实关注它们的用户,可让他们选择接收通知。 +</li> + <li> 如果相关的新信息当前显示在屏幕上,则不要创建通知。 +不过可以使用应用本身的 UI 在上下文中将新信息直接告知用户。 + + + 例如,聊天应用不应在用户主动和另一名用户聊天时创建系统通知。 +</li> + <li> 对于技术要求不高的操作(例如保存或同步信息或更新应用),如果应用或系统无需用户参与就可解决问题,请不要中断用户。 + +</li> + <li> 如果可以让应用自行恢复错误,而不必让用户采取任何操作,则不要中断用户来告知他们发生此错误。 + +</li> + <li> 请不要创建没有实际通知内容和仅仅是为您的应用做宣传的通知。通知应当提供有用、及时、最新的信息,而不应仅用于推广应用。 + + + +</li> + <li> 请不要为了向用户宣传您的品牌而创建过多的通知。 + + 此类通知会让用户不满,从而很可能离您而去。提供少量更新信息并让用户保持与您的应用交互的最佳方式是开发一个小工具,让用户可以选择是否将其放在主屏幕上。 + + + + +</li> +</ul> + +<h2 style="clear:left" id="interacting_with_notifications">与通知交互 +</h2> + +<p>通知由状态栏中的图标指示,并且可以通过打开抽屉式通知栏进行访问。 + +</p> + +<p>触摸通知会打开相关联的应用并进入与通知匹配的详细内容。在通知上向左或向右滑动会将其从抽屉式通知栏中删除。 + +</p> + +<h3 id="ongoing_notifications">持续性通知</h3> +<div class="figure" style="width:311px"> + <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" /> + <p class="img-caption"> + 因播放音乐而持续显示的通知 + </p> +</div> +<p>持续性通知可让用户持续了解后台运行的进度。例如,音乐播放器在通知系统中通告当前播放的曲目,并继续进行播放,直至用户停止播放。 + + + +持续性通知也可为持续时间较长的任务(例如下载文件或视频编码之类的任务)向用户显示反馈。 + +用户无法手动从抽屉式通知栏中删除持续性通知。 +</p> + +<h3 id="ongoing_notifications">媒体播放</h3> +<p>在 Android 5.0 中,锁定屏幕不会为弃用的 +{@link android.media.RemoteControlClient} 类显示传输控件。但是它<em>确实</em>会显示通知,因此每个应用的播放通知现在是用户在锁屏状态控制播放的主要方式。 + +此行为可让应用更好地控制显示哪些按钮,这样,无论是否锁屏,都可以为用户提供一致的体验。 + + +</p> + +<h3 style="clear:both" +id="dialogs_and_toasts_are_for_feedback_not_notification">对话框和 Toast +</h3> + +<p>如果您的应用当前未显示在屏幕上,则不应创建对话框或 Toast。 +对话框或 Toast 应仅限用于即时响应用户在应用内部采取的操作。有关使用对话框和 Toast 的进一步指导,请参阅<a href="/design/patterns/confirming-acknowledging.html">确认和确知</a>。 + + + +</p> + +<h3>排名和排序</h3> + +<p>通知属于新闻,因此基本以时间倒序显示,并且会特别考虑应用规定的通知<a href="#correctly_set_and_manage_notification_priority">优先级</a>。 + + +</p> + +<p>通知是锁定屏幕的关键部分,并且在设备显示屏每次亮起时突出显示。 + +锁定屏幕上的空间有限,因此确定哪些通知最为紧急或最密切相关非常重要。 + +由于这个原因,Android 在处理通知时使用了更为精密的排序算法,考虑到以下因素: + +</p> + +<ul> + <li> 时间戳以及应用规定的优先级。</li> + <li> 通知是否最近以声音或振动形式告知过用户。 +(也就是说,如果手机刚发出了铃声,并且用户希望知道“刚才发生了什么?”,那么锁定屏幕应让用户一眼看到相应的通知。) + + +</li> + <li> 与使用 {@link android.app.Notification#EXTRA_PEOPLE} 的通知相关的任何人,尤其是加星标的联系人。 +</li> +</ul> + +<p>为了充分利用此排序功能,请专注于您希望建立的用户体验,而不是拘泥于列表上的某个特定项。 + +</p> + + <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" /> + + <p class="img-caption" style="margin-top:10px">Gmail 通知使用的是默认优先级,因此它们的顺序通常低于来自即时通讯应用(例如环聊)的消息,但是在有新邮件送达时会临时占位。 + + + + + </p> + + +<h3>在锁定屏幕上</h3> + +<p>由于通知在锁定屏幕上可见,所以用户隐私是特别重要的考虑事项。 + +通知通常包含敏感信息,并且不一定需要让所有拿起设备并打开显示屏的人看到。 + +</p> + +<ul> + <li> 对于配置了安全锁定屏幕(PIN 码、图案或密码)的设备,界面分为公用和私人部分。 +公用界面可显示在安全锁定屏幕上,因此任何人都可看见。 +私人界面是锁定屏幕背后的内容,只有在用户登录设备后才会显示。 +</li> +</ul> + +<h3>用户对显示在安全锁定屏幕上的信息的控制</h3> +<div class="figure" style="width:311px"> + <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" /> + <p class="img-caption"> + 位于锁定屏幕上的通知,具有用户解锁设备后可显示的内容。 + </p> +</div> + +<p>在设置安全锁定屏幕时,用户可以选择从安全锁定屏幕隐藏敏感的详细信息。 +在这种情况下,系统 UI 会考虑通知的<em>可见性级别</em>,从而确定哪些内容可以安全地显示出来。 + +</p> +<p> 要控制可见性级别,可调用 <code><a +href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>,然后指定以下值之一: + +</p> + +<ul> + <li><code><a +href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>。显示通知的完整内容。 + + 在未指定可见性的情况下,此设置是系统的默认设置。</li> + <li><code><a +href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>。在锁定屏幕上,会显示通知的基本信息,包括其图标以及发布此通知的应用名称。 + +剩下的通知详细信息不会显示。需要注意的一些有用建议如下: + + <ul> + <li> 如果您希望为通知提供不同的公用版本,供系统显示在安全锁定屏幕上,可在 <code><a +href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code> 字段中提供替换通知对象。 + + + + <li> 该设置可让您的应用有机会创建有用内容的删减版本,但是不会显示个人信息。 +可参考短信应用的示例,这种应用的通知包括短信的文本以及发信者的姓名和联系人图标。该通知应为 <code>VISIBILITY_PRIVATE</code>,但是 <code>publicVersion</code> 仍然可以包含“有 3 条新消息”这样的有用信息,而不会提供其他识别性详细信息。 + + + + + </ul> + </li> + <li><code><a +href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>。仅显示最为精简的信息,甚至不包括通知图标。 +</li> +</ul> +<h2 style="clear:both" id="notifications_on_android_wear">Android Wear 上的通知 +</h2> + +<p>通知及其<em>操作</em>默认会和穿戴设备桥接。开发者可以控制哪些通知会从手机桥接至手表,反之亦然。 + + +开发者也可以控制哪些操作会进行桥接。如果您的应用包含无法通过单次点击完成的操作,则可以将这些操作隐藏在您的 Android Wear 设备通知中,或者考虑将它们连接至 Android Wear 设备应用,从而可让用户在其手表上完成操作。 + + + + + +</p> + +<h4>桥接通知和操作</h4> + +<p>连接的设备,例如手机,可将通知桥接至 Android Wear 设备,从而将通知显示在此处。 +与此相似,您也可以桥接操作,从而让用户可在 Android Wear 设备上直接操作通知。 +</p> + +<p><strong>桥接</strong></p> + +<ul> + <li> 新的即时通讯</li> + <li> 单次点击操作,例如 +1、赞、收藏</li> +</ul> + +<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" /> + +<p><strong>不要桥接</strong></p> + +<ul> + <li> 新收到的播客通知</li> + <li> 映射至手表上无法使用的功能的操作</li> +</ul> + + + +<p><h4>为 Android Wear 设备定义的独特操作</h4></p> + +<p>有些操作只能在 Android Wear 上执行。包括以下情况:</p> + +<ul> + <li> 例如“马上回来”这样的预设回复快速列表</li> + <li> 在手机上打开</li> + <li> 调出语音输入屏幕的“评论”或“回复”操作</li> + <li> 启动 Android Wear 专用应用的操作</li> +</ul> + +<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" /> |