小吃店与吐司
Posted
技术标签:
【中文标题】小吃店与吐司【英文标题】:Snackbar vs Toast 【发布时间】:2018-09-13 02:42:55 【问题描述】:我是 android 开发的新手,我对 Context 和 View 感到困惑。所以,我只想知道为什么我们在 Snackbar 中传递视图而在 Toast 中传递上下文,而我们同时使用两者来显示通知/消息。
【问题讨论】:
【参考方案1】:Toast
只是显示在当时屏幕上的任何内容之上。它与当时屏幕上发生的事情没有任何联系。事实上,您的Toast
可以显示在另一个完全不同的应用程序之上。 Toast
需要 Context
,因为您可以将资源 ID 作为参数传递,Android 将需要访问您的应用程序的资源(通过 Context
)。 Android 还需要Context
,因为它会将您的Toast
绑定到您的应用程序,以便它可以在某些情况下清理它。
Snackbar
与应用程序的 UI 耦合更紧密。 Snackbar
是 View
,它与应用程序的视图层次结构相关联。创建Snackbar
时,将View
作为参数传递,以便Android 可以扫描视图层次结构以在视图层次结构中找到合适的位置来创建Snackbar
。如果您的视图层次结构包含CoordinatorLayout
,则Snackbar
会获得其他行为(滑动以关闭,将浮动操作按钮移开)。如果您没有 UI,则无法显示 Snackbar
,并且无法在其他应用程序的 UI 中显示 Snackbar
。
【讨论】:
【参考方案2】:Snackbar
向上遍历视图树,直到它决定放置的位置。然后它将自己附加到视图树。因此,它需要一个附加到视图树的视图作为起点。
Toast
只是在屏幕上显示一条浮动消息。它不需要附加到任何视图,因此不需要 View 对象。但是,它确实需要一些平台知识,所以Context
是合适的。
【讨论】:
以上是关于小吃店与吐司的主要内容,如果未能解决你的问题,请参考以下文章