组件 对话框

对话框

对话框用于向用户传递特定任务的信息,可能包含关键信息、需要用户做出决定或涉及多项任务。

对话框包含文本和 UI 控件,会持续显示直到用户将其关闭或完成了其中的必要操作。请谨慎使用对话框,因为它们会打断用户操作。

对话框类型包括:

  • 警告框是紧急的中断,用于告知情况并要求用户确认。
  • 简单菜单为列表项提供选项,而简单对话框可提供列表项的详细信息或操作。
  • 确认对话框要求用户明确确认选择。
行为

对话框不能被其他元素或屏幕边缘遮挡,会始终保持焦点,直到用户将其关闭或完成了其中的必要操作(例如选择设置项)。

全屏对话框(仅移动端)

全屏对话框最适合复杂任务或需要输入法编辑器的任务,因为它们能在保存前将一系列任务分组处理。

Material Design 中的对话框用于任务和关键决策

行为 Expand and collapse content An arrow that points down when collapsed and points up when expanded.

标准对话框进阶

对话框是模态窗口的子类型,此处示例为标准 Material 系统对话框。(其他模态窗口结构因变化过多未涵盖,例如购买流程的品牌按钮、非标准 UI 表单元素或独特布局。)

减少对用户的打断

请谨慎使用对话框,因为它们会打断用户操作。其突然出现会迫使用户停止当前任务并聚焦对话框内容。并非所有选择、设置或细节都需要打断用户。对话框的替代方案包括菜单或行内展开,两者都能保持当前上下文。

对话框应显示在其他元素之上

对话框绝不能被其他元素遮挡或部分显示在屏幕外,会始终保持焦点直到用户将其关闭或完成了其中的必要操作(例如选择设置项)。

对话框应避免:

  • 从对话框中打开对话框
  • 包含可滚动内容

全屏对话框例外

全屏对话框可以打开其他对话框(例如选择器),因其设计可容纳额外的材质层,而不会显著增加应用感知的海拔高度或视觉干扰。

Material Design 对话框内容示例

对话框内容示例

Material Design 中的全屏对话框示例

全屏对话框示例

可滚动内容例外

某些对话框内容需要滚动,例如铃声列表。

  • 对于可滚动的选项列表,对话框标题应固定在顶部。这确保无论选项在列表中的位置如何,选中项始终与标题同时可见。
  • 否则,标题会随内容滚动而消失。操作按钮则在内容滚动时始终保持在原位。

对话框与底层父材质分离,不随其一起滚动。

显示更多内容

要在对话框中显示更多内容,请在内容区域使用行内展开,或考虑使用专为大量内容优化的替代组件。

关闭对话框

可通过点击对话框外部区域或系统返回按钮(Android)关闭对话框。另外,也可禁用用户关闭对话框的能力,使用户必须在继续前选择其中一个操作。

Material Design 中固定对话框标题用于可滚动列表

查看可滚动选项列表时固定对话框标题,确保标题和选中项同时可见。

警告框 Expand and collapse content An arrow that points down when collapsed and points up when expanded.

警告框是紧急的中断,需要用户确认以告知某种情况。

与 Snackbar 的区别:Snackbar 在操作后提供可选信息,例如确认草稿的放弃状态。它们通常允许用户撤销刚执行的操作。

无标题栏的警告框

大多数警告框不需要标题。

它们用一两句话总结决定,通过:

  • 提出问题(例如“删除此会话?”)
  • 对操作按钮进行说明
Material Design 操作:放弃决定的结果

推荐做法

肯定操作文本“Discard”(放弃)明确表明了决定的结果。

Material Design 中更好的操作对应:“取消”和“删除”

不推荐做法

否定操作文本“No”(不)回答了问题,但未表明之后会发生什么。更好的操作对应是明确的“Cancel”(取消)和“Delete”(删除)。

带标题栏的警告框

仅在高风险情况下(例如可能丢失连接)使用带标题栏的警告框。用户应能仅凭标题和按钮文本理解选择。

如需标题:

  • 在内容区域使用清晰的问题或说明进行解释,例如“清除 USB 存储?”
  • 避免道歉、模糊不清或疑问性语句,例如“警告!”或“你确定吗?”
Material Design 中带有问题、影响和操作的对话框

推荐做法

此对话框提出了具体问题,简要阐述了其影响,并提供了明确的操作。

Material Design 对话框中的模糊问题

不推荐做法

此对话框提出了模糊问题,其影响范围不明确。

简单菜单 Expand and collapse content An arrow that points down when collapsed and points up when expanded.

仅限手机和平板

简单菜单显示列表项的选项,用户选择后立即提交选择。详见简单菜单

消除歧义:简单对话框显示列表项的详细选项或提供相关操作。简单对话框可显示与简单菜单相同的内容。但优先使用简单菜单,因为它们对用户当前上下文的破坏较小。

Material Design 中的简单菜单示例

简单菜单示例

Material Design 中的简单菜单示例

简单对话框 Expand and collapse content An arrow that points down when collapsed and points up when expanded.

简单对话框可提供有关列表项的详细信息或操作,例如显示头像、图标、说明性副文本或独立操作(例如添加帐户)。

触摸机制:

  • 选择选项后立即提交并关闭菜单
  • 触摸对话框外部或按返回键将取消操作并关闭对话框

减少对用户的打断

简单对话框比简单菜单更易打断用户,应谨慎使用。

Material Design 中的简单对话框示例

简单对话框示例

移动设备上的对话框宽度基于 Material Design 单位

在移动设备上,对话框宽度基于单位的倍数。该单位可以是:

  • 一个增量
  • 距离屏幕边缘的特定距离

无明确取消按钮

简单对话框没有用于接受或取消操作的明确按钮。

Material Design 中带“取消”按钮的简单对话框

不推荐做法

此简单对话框有明确的“Cancel”按钮。

Material Design 中带取消按钮的简单对话框

不推荐做法

此简单对话框有明确的“Cancel”按钮。

规格

  • 简单对话框中的行高可以不同
  • 简单对话框在屏幕中垂直和水平居中显示。
  • 对话框距离屏幕边缘左右至少 40dp,上下至少 24dp
  • 对话框内容距离对话框边缘 24dp

避免文本换行

如果简单菜单中的任何文本换行到另一行,请改用简单对话框。

Material Design 中不同行高的简单对话框

推荐做法

此简单对话框具有不同的行高。

确认对话框 Expand and collapse content An arrow that points down when collapsed and points up when expanded.

确认对话框要求用户在提交选项前明确确认选择。例如,用户可以收听多个铃声,但仅在触摸“确认”时才会做出最终选择。

在确认对话框中点击“Cancel”或按返回键将取消操作、放弃所有更改并关闭对话框。

避免从对话框中启动其他对话框

确认对话框应避免启动其他简单对话框或简单菜单,因为它们会增加复杂性并看似提高了应用的海拔高度。如需使用多层对话框完成任务,请考虑改用全屏对话框

Material Design 铃声选择需点击“确认”提交

以下确认对话框中的铃声选择在用户点击“确认”前不会生效。

Material Design 中控件左对齐的确认对话框

控件位于文本左侧的确认对话框示例。

确认单个值

确认对话框可使用列表以外的布局,例如日期选择器,但仍专注于指定单个值(选择日期,而不是同时选择日期和时间)。

Material Design 中用户选择日期并点击“确认”

用户通过选择日期并点击“确认”按钮来设置日期。

Material Design 中用户用时钟指针设置小时

用户通过移动时钟指针并点击“确认”按钮来设置小时。

取消和确认按钮

确认对话框同时提供明确的确认按钮和取消按钮。点击取消按钮、返回键或离开确认对话框将放弃更改。

Material Design 中明确的确认和取消按钮

推荐做法

提供明确的确认和取消按钮。

Material Design 中单个对话框按钮导致返回操作模糊

不推荐做法

单个对话框按钮会使系统返回操作变得模糊:返回是取消还是确认?

全屏对话框 Expand and collapse content An arrow that points down when collapsed and points up when expanded.

仅限移动设备:由于空间有限,全屏对话框可能更适合移动设备,而非屏幕更大的设备。

用法

全屏对话框将一系列任务(例如创建日历条目)分组,用户可选择提交或放弃这些任务。在触摸“保存”前不会保存任何选择。触摸“X”将放弃所有更改并退出对话框。

全屏对话框支持复杂布局,最小化堆叠材质(对话框上方的对话框)的外观,并临时将应用的感知海拔重置为较高基线。它们允许任务启动简单菜单或简单对话框作为复杂操作的一部分。

全屏对话框可用于满足以下任一条件的内容或任务:

  • 对话框包含需要输入法编辑器(IME)的组件(如选择器或表单字段),例如键盘
  • 更改未实时保存时
  • 应用无草稿功能时
  • 在提交前执行批量操作或排队更改时
Material Design 中用于选择日期的全屏对话框

全屏对话框支持用于选择日期的简单对话框。

Material Design 全屏对话框中的日期选择器

从全屏对话框打开的日期选择器

操作

在全屏对话框顶部放置确认和否定操作。

确认

屏幕右上角的确认操作使用描述性动词,例如:保存、发送、共享、更新或创建。不要使用模糊的操作来确认,例如:完成、确定或关闭。

在对话框中所有必填字段满足前,确认操作处于禁用状态。

放弃

放弃操作(屏幕左上角的“X”)和返回按钮都会关闭全屏对话框并丢弃所有更改。

  • 如果未进行任何更改,对话框直接关闭,无需确认放弃
  • 如果用户进行了任何更改,系统会提示用户确认放弃操作
Material Design 中使用清晰的标签进行确认操作

不推荐做法

不要使用“Close”(关闭)等模糊术语进行确认操作。

Material Design 中如有更改则确认放弃

推荐做法

如果用户进行了任何更改,则提示用户确认放弃操作。

导航

全屏对话框中使用的“X”不同于向上箭头;向上箭头表示视图状态持续保存。例如,设置中使用向上箭头表示所有更改在选择后立即提交,无需明确的确认或取消操作。

Material Design 设置中向上箭头表示立即保存

此设置示例中的向上箭头表示任何更改将在选择后立即保存。

Material Design 中点击“X”放弃更改

点击此设置示例中的“X”将放弃所有更改。仅当点击保存按钮时才会保存更改。

标题

全屏对话框标题不使用动态类型。

标题应简洁。如有必要,可换行到第二行,然后应截断。

如果全屏对话框使用可变长度的标题或预期长标题(例如,某些单词在不同语言中较长),请将标题文本放在对话框的内容区域,而非应用栏中。

Material Design 中应用栏使用固定长度标题

不推荐做法

避免在应用栏中使用可变长度的标题。

Material Design 中全屏对话框的长标题

推荐做法

将长标题放在全屏对话框的内容区域。

规格 Expand and collapse content An arrow that points down when collapsed and points up when expanded.

对话框包含内容、操作和可选的标题。

可选标题

标题简要描述正在做出的选择类型。标题应始终完整显示,且仅在必要时使用。例如,标题可指示对话框与任务的哪个部分相关,或说明决定将影响什么。

内容

对话框内容通常由文本和/或 UI 控件组成,专注于特定任务,例如确认项目删除或选择设置。

Material Design 中带标题、内容和操作的对话框

此对话框包含标题、内容和操作。

操作

对话框呈现聚焦且有限的操作集,通常为肯定或否定操作。

  • 肯定操作放在右侧,用于继续流程。肯定操作可能具有破坏性,例如“删除”或“移除”。
  • 否定操作直接放在肯定操作的左侧,用于返回原始屏幕或流程步骤
  • 否定和肯定操作文本可以是“取消”/“确定”或表示决定结果的具体主动动词或动词短语。
Material Design 中否定操作在肯定操作左侧

不推荐做法

否定操作始终直接放在肯定操作的左侧。

对话框操作应提供与对话框标题和内容直接相关的明确选择。

Material Design 中避免模糊选择

不推荐做法

避免向用户呈现模糊或不明确的选择。在此示例中,“取消”与标题无关,因为没有提出明确的操作。

确认操作

在需要用户知悉对话框内容才能继续的情况下,警告框可仅包含一个操作。请谨慎使用此类警告框,因其具有打断性。可考虑使用其他方法向用户传递信息,例如在视图内容中内嵌显示。

操作数量

对话框不应包含两个以上的操作。第三个操作(例如“了解更多”)会离开对话框,可能导致任务未完成。

避免使用“了解更多”操作访问帮助文档;应使用对话框内的内嵌展开。如需更广泛的信息,请在进入对话框前提供。

Material Design 对话框:“了解更多”操作使状态不确定

不推荐做法

“了解更多”操作会离开此对话框,使其处于不确定状态。

颜色

对话框操作默认使用系统颜色,但应反映你产品的调色板。使用对比色(例如调色板的强调色)将对话框操作与对话框内容区分开。

无大写字母的语言

对于没有大写字母的语言(例如中文、日文或韩文),保持操作的位置、间距和颜色一致性对于将其与常规文本区分开很重要。

Material Design 中操作放置和颜色保持清晰

操作和文本颜色的一致放置有助于将操作与常规文本区分开,即使肯定操作处于禁用状态。

Material Design 中做出选择前肯定操作常被禁用

在做出选择前,肯定操作更可能处于禁用状态。否定操作从不被禁用。

内容指南

内容区域四周内边距:24dp
标题与正文文本之间的间距:20dp
按钮之间的间距:8dp
按钮高度:36dp
操作区域高度:52dp
对话框海拔高度:24dp

Material Design 对话框中的内容内边距

内容内边距

Material Design 中带 24dp 底部内边距的对话框

在内容区域中,内容下方的 24dp 内边距有助于将其与操作分隔开。

对话框内容底部内边距:24dp
按钮高度:36dp
按钮外边距:8dp

Material Design 对话框滚动状态下的内容内边距

滚动状态下对话框的内容内边距

按钮宽度和内边距

按钮高度:36dp
最小按钮宽度:64dp
按钮内边距:8dp
按钮之间的间距:8dp

Material Design 对话框按钮宽度和内边距的详细信息

按钮宽度和边距的详细信息

按钮高度:36dp
按钮区域高度:52dp
左侧按钮边距:24dp
右侧按钮边距:8dp
按钮之间的间距:8dp

Material Design 对话框按钮区域的细节

按钮区域的细节

Material Design 中分割线分隔内容和操作的对话框

滚动状态下,分割线将对话框的内容区域与操作区分开。

并排按钮

当每个按钮的文本不超过最大按钮宽度时,建议使用并排按钮,例如常用的确认/取消按钮。

使用以下公式计算给定对话框的最大按钮宽度:

对话框中的按钮的最大宽度 =

(对话框宽度 - 8dp - 8dp - 8dp)/2

例如:

280dp 宽对话框中的最大按钮宽度 =

(280dp - 8dp - 8dp - 8dp)/2 = 128dp

Material Design 中确认/取消的并排按钮

按钮高度:36dp
文本和操作区域之间的间距:24dp
按钮周围的边距为:8dp

竖排全宽按钮

当文本标签超过最大按钮宽度时,请使用竖排按钮来容纳文本。肯定操作堆叠在否定操作上方。

Material Design 中用于文本标签的竖排全宽按钮

每个按钮的可触摸目标高度:48dp
文本和可触摸目标之间的间距:24dp
可触摸目标下方到对话框边缘的间距:8dp
按钮文本右侧边缘与对话框边缘之间的间距:16dp

简单对话框关键线

距离左右边缘 24dp 的垂直关键线。与图标或头像相关的内容在距离左侧边缘 80dp 处对齐。

Material Design 中简单对话框的关键线

简单对话框的关键线

简单对话框内容指南

建议简单对话框有标题,但可根据产品需求省略标题。

标题

  • 顶部内边距:24dp
  • 底部内边距:20dp
  • 文本尺寸:Roboto Medium 20sp
  • 文本行高:28dp

内容

  • 带头像的单行列表的行高:56dp
  • 底部边缘内边距:8dp
Material Design 中简单对话框的标注

简单对话框的标注

全屏对话框标题

全屏对话框标题可换行到第二行,然后应截断。标题应简洁,但在某些情况下(例如某些单词在不同语言中较长),标题可能需要换行。


单行文本的应用栏高度:56dp
两行文本的应用栏高度:80dp
标题文本关键线:72dp
标题文本:20sp
标题文本顶部和底部内边距:20dp
否定操作距离左侧边缘的内边距:16dp
肯定操作文本:14sp
肯定操作文本左右内边距:16dp

Material Design 全屏对话框应用栏细节

全屏对话框应用栏的详细信息

Material Design 中带单行文本应用栏的全屏对话框

带单行文本应用栏的全屏对话框。

Material Design 对话框中概念的图示

请注意,此图片仅用于说明。长标题应放在全屏对话框的内容区域。