安卓 - Snackbar与Toast - 用法与区别

149

迄今为止,我们的应用程序仅使用Toast,由于我们计划采用Support Design Library中的某些新功能,因此我想知道Snackbar与Toast的推荐用法。

我一直在阅读Google材料snackbar文档

Snackbar在移动设备上的屏幕底部和桌面左下方提供有关操作的轻量级反馈。它们位于屏幕上的所有其他元素之上,包括FAB。

和toast。

Android还提供胶囊形状的toast,主要用于系统消息。 Toast类似于snackbar,但不包含操作并且无法从屏幕上滑开。

我了解它们的作用,但在何时使用哪个有点困惑。这是否意味着:

  • 如果我不需要用户交互,我会使用toast?
  • “系统消息”是什么意思?这适用于在我的应用程序和Android系统之间发生重要事件时显示信息吗?
  • 我喜欢滑动屏幕的功能-这是否是开始使用Snackbar替换Toast的原因?(这是有点基于个人观点的问题)
9个回答

141

如果我不需要用户交互,我应该使用 toast 吗?

您仍然可以使用 Snackbar。Snackbar 不一定要有一个操作。

“系统消息”是什么意思?它适用于我的应用程序和 Android 系统之间发生重要事件时显示信息吗?

我认为这意味着如果有一些与系统相关的消息,则应使用 Toast,无论是整个 Android 还是您可能正在运行的某个后台服务。例如:未安装文本转语音未找到电子邮件客户端

我喜欢滑动屏幕关闭提示的功能 - 这算是用 Snackbar 替代 Toast 的原因吗?(虽然这是一个有点主观的问题)

那是一个原因,但还有其他几个优点。例如:即使活动已经结束,您的 Toast 仍会留在屏幕上。Snackbar 不会。 如果 Toast 在应用退出后很长时间仍然弹出(或在连续创建多个 Toast 的情况下持续弹出),将会带来更少的混乱。这种情况不会发生在 Snackbar 中。

最重要的是:如果您正在考虑更换,请使用 Snackbar。Snackbar 比 Toast 更好看。


26
干杯,Snackbar只在你处于该活动时才存在这一点确实很有用。 - Jakub Holovsky
12
我想补充一点,Toast通常用于应用整体的消息和系统消息,而Snackbar则通常用于与当前活动相关的消息。例如,如果您的应用在启动时检查更新,则最好使用Toast来显示结果消息。如果您的应用中有可以删除的项目,则最好使用带有撤销按钮的Snackbar来显示已删除的响应消息。 - Subaru Tashiro
17
还有一件需要注意的事情是,当通知被关闭时,Toast 不会显示。 - Horatio
1
另一个重要的区别是,任何时候只会显示一个 Snackbar,而不像Toast可以在彼此之上显示多个Toast,这可能会让用户感到烦恼,特别是考虑到它们无法通过滑动来移除。 - Firzen

77

我想对Toast和Snackbar进行简要比较。在我看来,如果您的意图是呈现需要用户交互/确认的警告或信息,则应使用Snackbar。如果只是一条不需要任何用户确认的信息消息,则可以使用Toast。

# Toast Snackbar
1 无法通过滑动取消 可以通过滑动取消
2 不需要Activity(可以在Android主屏幕上或其他应用程序上方显示) 可以在您的应用程序的活动中显示
3 无法处理用户输入 可以处理用户输入
4 适用于向用户显示信息消息 适用于向用户显示需要注意的警告/信息类型消息

39

Toast:

  1. Toast是在API Level 1中添加的。
  2. 基本上不需要Activity(可以显示在Android主屏幕上甚至覆盖其他应用程序)。
  3. 它不能根据用户输入执行操作。
  4. 无法通过滑动来消除。
  5. 无法处理用户输入,例如滑动、点击等。
  6. 适用于向用户显示信息消息。

SnackBar:

  1. SnackBar是在API Level 23中添加的。
  2. 它可以显示在应用程序的活动中。
  3. 它可以执行操作。
  4. 它可以通过滑动来消除。
  5. 它可以处理用户输入。
  6. 适用于向用户显示需要注意的警告/信息类型消息。

使用SnackBar和Toast:

SnackBar:

SnackBar可用于需要显示简单弹出消息以及执行操作选项的区域。

例如:在GMail应用程序中,当您删除邮件时,快速SnackBar会在底部显示消息'1已删除',带有一个“撤消”操作按钮。按下“撤消”操作按钮后,已删除的邮件将被还原。

Toast:

Toast可用于需要显示系统消息的区域。

例如:

当您的应用程序尝试从远程服务器下载JSON但由于服务器超时或找不到资源而失败时,您只需要显示错误消息,说'发生错误'。但是请注意,Toast消息无法通过滑动来消除。如果您仍想在应用程序中具有消除它的功能,请选择SnackBar。


20

根据弹出式消息概述的官方文档:

注意: Snackbar类取代了Toast。虽然目前Toast仍然受支持,但Snackbar现在是向用户显示简短、瞬时消息的首选方式。

以及(Material Design) Snackbars 的文档:

相关概念:Android还提供了一个类似API的Toast类,可用于显示系统级通知。一般来说,Snackbar是向用户显示反馈信息的首选机制,因为它们可以在操作发生的UI上下文中显示。仅在无法这样做的情况下保留Toast


7

Toast和Snackbar在Android中的区别

  • Toast消息可以自定义并打印在屏幕上的任何位置,但Snackbar只能在屏幕底部显示。
  • Toast消息没有操作按钮,而Snackbar可以选择包含操作按钮。
  • Toast消息在时间限制结束之前无法关闭,但是Snackbar在时间限制之前可以通过滑动关闭。
  • 您可以使用以下三个不同的值设置消息显示的时间长度。
    Snackbar.LENGTH_LONG
    Snackbar.LENGTH_SHORT
    Snackbar.LENGTH_INDEFINITE

用法

Toast(提示框)

Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_SHORT).show();

Snackbar

Snackbar snackbar = Snackbar.make(view,"This is Simple Snackbar",Snackbar.LENGTH_SHORT);
snackbar.show();

2
Google的Material Design Specification表示,没有操作的Snackbar是可以接受的。如果只显示单个字符串,他们提供了Snackbar应该看起来像什么的示例。我会认为“系统消息”意味着设备事件,例如网络连接丢失,而将电子邮件归档是一个特定于Gmail的操作,例如。

为了保持一致,最好选择Toast或Snackbar,并在整个应用程序中应用它。


1
短答案是这两种方式都可以用来向用户传达后台发生的事情,你可以选择其中一种,它们都可以。只需确保您使用的是相同的一种,不要来回切换。
长答案:
- 不,这意味着如果您需要某些操作,则必须使用 Snackbar。您仍然可以仅针对消息(例如“上传完成”)使用 Snackbar。 - 通过“系统”,并不仅指 Android 系统。例如,如果从服务器获取信息时出现了 json 解析问题,您仍然可以使用 toast 来告知用户与服务器通信时出现了问题。 - 如果您真的需要滑动关闭,则绝对有理由选择 Snackbar。

1

Android还提供了一个胶囊形状的toast,主要用于系统消息。

我认为"系统消息"也指出了一个toast会在特定时间内显示,并且即使用户在活动之间导航甚至将应用程序移至后台,也无法解除它。

我认为Snackbar的优点是将其范围限制在一个活动中并能够解除它。


1
我们的设计团队正在考虑使用toast或snackbar。我们得出结论,应该使用snackbar,因为它更加灵活。
仅当我们需要一个持久的、短字符串的信息消息,在不同的屏幕上仍然有意义时,才应该使用toast。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接