Android - Snackbar vs Toast - 用法和区别

Android - Snackbar vs Toast - usage and difference

到目前为止,我们一直只在我们的应用程序中使用 Toast,因为我们计划采用支持设计库中的一些新功能,所以我想知道 Snackbar 与 Toast 的推荐用法是什么。

我一直在阅读 the google material snackbar doc.

Snackbars provide lightweight feedback about an operation in a small popup at the base of the screen on mobile and at the lower left on desktop. They are above all over elements on screen, including the FAB.

祝酒。

Android also provides a capsule-shaped toast, primarily used for system messaging. Toasts are similar to snackbars but do not contain actions and cannot be swiped off screen.

我明白他们的作用,但我对什么时候使用什么感到有点困惑。是否意味着:

If I don't require user interaction I would use a toast?

您仍然可以使用 Snackbar。与 Snackbar 的操作不是强制性的。

What is meant by "system messaging"? Does that apply to displaying information when something important happened between my app and the Android system?

我相信这意味着如果有一些与系统有关的消息,将使用 Toasts。无论是作为一个整体 android 还是某些后台服务,您都可能是 运行。例如。 Text-To-Speech is not installed.No Email client found.

What I like is the swipe off screen feature - would that be a reason to start replacing toasts with Snackbar? (this is a bit opinion based question though)

这是原因之一。但还有其他几个优点。例如:即使 activity 完成,您的 toast 仍保留在屏幕上。 Snackbar 不会。 如果在应用程序退出很长时间后 toast 没有弹出(或者在按顺序创建多个 Toast 的情况下继续弹出),那么混淆就更少了。 Snackbar 不会发生这种情况。

最重要的是:我建议如果你在想,你应该切换。 SnackBars 看起来比 Toasts 好得多。

Google 的 Material Design Specification 表示可以在没有操作的情况下使用 Snackbar。他们提供了 Snackbar 仅显示单个字符串时应该是什么样子的示例。我假设 "System Messaging" 表示设备事件,例如网络连接丢失 - 而归档电子邮件是 Gmail 特定的操作,例如。

为了保持一致性,选择 Toast 或 Snackbar 并将其应用于整个应用程序是有意义的。

简短的回答是,这是两种在后台向用户传达信息的方式,您可以使用其中一种,它们都很好。只要确保您使用的是同一个,而不是在它们之间来回切换即可。

长答案:

  • 不,这意味着如果您需要执行某些操作,则必须使用 Snackbar。您仍然可以仅将 Snackbar 用于消息(例如 "Uploading finished")。
  • "system" 并不意味着只有 Android 系统。例如-如果在从您的服务器获取信息时出现 json 解析问题,您仍然可以使用 toast 让用户在与服务器通信时出现问题。
  • 如果你真的需要关闭它,那绝对是选择 Snackbar 的理由

我想补充一下吐司和小吃店的小对比。在我看来,如果您的目的是向用户 interaction/acknowledgement 提供警告或信息,您应该使用小吃店。如果它只是一条不需要任何用户确认的信息消息,您可以使用 toast。

# Toast Snackbar
1 Can't be dismissed by swiping Can dismiss by swiping
2 Activity not required (Can show in android home or above other apps) Can show inside an activity of your app
3 Can't handle user input Can handle user input
4 Good for showing info messages to user Good for showing warning/info type messages to user that needs attention

吐司:

  1. Toast 已添加到 API 级别 1
  2. 基本不需要Activity(可以显示在Android首页甚至其他应用上面)
  3. 无法根据用户输入执行操作
  4. 滑动无法关闭
  5. 它无法处理滑动、点击等用户输入
  6. 适合向用户显示信息消息

小吃吧:

  1. SnackBar 已添加到 API 级别 23
  2. 它可以显示在应用程序activity中
  3. 它可以执行一个动作
  4. 滑动即可关闭
  5. 它可以处理用户输入
  6. 适合向需要注意的用户显示 warning/info 类型的消息

SnackBar 和 Toast 的用法:

小吃吧:

SnackBar 可用于需要显示简单弹出消息以及执行操作的选项的区域。 例如:在 GMail 应用程序中,当您删除 Mail 时,快速 SnackBar 会在底部显示消息“1 Deleted”和操作按钮“Undo”。按“撤消”操作按钮后,将恢复已删除的邮件。

吐司:

Toast可以用在需要显示系统消息的地方

例如:

当您的应用程序尝试从远程服务器下载 JSON 但由于服务器超时或未找到资源而失败时,您只需要显示错误消息“发生错误”。但要明白 Toast 消息不能通过滑动来消除。如果您仍然希望在您的应用程序中拥有关闭它的功能,请选择 SnackBar。

我们的设计团队也在考虑使用 toasts 或 snackbars。我们得出的结论是,考虑到它的灵活性,该应用程序应该使用小吃店。

仅当我们需要 持久的短字符串信息消息 时才应使用 Toasts,这种信息消息在不同屏幕上仍然有意义。

根据 Pop-up messages overview 的官方文档:

Note: The Snackbar class supersedes Toast. While Toast is currently still supported, Snackbar is now the preferred way to display brief, transient messages to the user.

和(Material设计)Snackbars的文档:

Related concepts: Android also provides a Toast class with a similar API that can be used for displaying system-level notifications. Generally, snackbars are the preferred mechanism for displaying feedback messages to users, as they can be displayed in the context of the UI where the action occurred. Reserve Toast for cases where this cannot be done.

Android also provides a capsule-shaped toast, primarily used for system messaging.

我认为 "system messaging" 他们还指的是这样一个事实,即 toast 将在特定时间显示,并且即使用户在活动之间导航并且即使应用程序移至后台也无法关闭.

我认为将其范围限制在 activity 并能够关闭它是 snackbar 的一个优势。

Toast 和 Snackbar 的区别Android

  • Toast 消息可以自定义并打印在屏幕的任何位置,但 Snackbar 只能显示在屏幕底部。
  • Toast 消息没有操作按钮,但 Snackbar 可能有可选的操作按钮。
  • Toast消息在限时结束前不能关闭,但Snackbar可以在限时前刷掉
  • 您可以使用这三个不同的值设置消息显示的时间长度。
    Snackbar.LENGTH_LONG
    Snackbar.LENGTH_SHORT
    Snackbar.LENGTH_INDEFINITE

用法

吐司

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

小吃店

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