我是android开发的新手,我在Context和View之间感到困惑。所以,我只是想知道为什么我们在Snackbar中传递视图但在Toast中传递上下文,而我们同时使用它们来显示通知/消息。
答案 0 :(得分:3)
Snackbar
遍历View树,直到它决定放置的位置。然后它会将自身附加到View树。因此,它需要附加到视图树的视图作为起点。
Toast
只是在屏幕上显示一条浮动消息。它不需要附加到任何视图,因此它不需要View对象。但是,它确实需要一些平台知识,因此Context
是合适的。
答案 1 :(得分:2)
Toast
只显示在当时屏幕上发生的任何事情上。它没有以任何方式与当时屏幕上发生的事情相关联。实际上,您的Toast
可以显示在另一个完全不同的应用程序之上。 Toast
需要Context
,因为您可以将资源ID作为参数传递,Android需要访问您应用的资源(通过Context
)。 Android还需要Context
,因为它会将您的Toast
绑定到您的应用程序,以便在某些情况下可以清除它。
Snackbar
与应用程序的UI紧密耦合。 Snackbar
是View
,它与您的应用程序的视图层次结构相关联。当您创建Snackbar
时,您会传递View
作为参数,以便Android可以扫描视图层次结构以在视图层次结构中找到合适的位置以创建Snackbar
。如果您的视图层次结构包含CoordinatorLayout
,则Snackbar
会获得其他行为(滑动以关闭,移动浮动操作按钮)。如果您没有用户界面,则无法显示Snackbar
,并且Snackbar
无法在其他应用程序的用户界面中显示。