欢迎来到Android design support library 系列之旅的第二部分,在第一部分中,我门讨论了 Floating action button 以及它的属性和一些FAB的问题。
今天我们来讨论另外一个组件”Snackbar”
您好 Snackbar, 再见Toast
Snackbar,它是一个轻量级,快速的操作反馈,这是一个完美的机会去使用它。
Snackbar 是 design support library的另外一个组件,通过使用它,我们能够在屏幕的底部(大多数时候)快速的弹出消息,它跟Toast很相似,但是又更加的灵活:
- 在一定的时间后会或者用户与屏幕交互后,会自动的消失。
- 可以自定义操作,可选操作。
- 我们可以将Snackbar滑出屏幕来让其消失
- 它是一个对上下文敏感的消息,所以这些消息是UI screen 的部分并且出现在屏幕其他所有元素之上,不像Toast消息一样覆盖在屏幕上。
- 同时只能够显示一个snackbar
Snackbar 继承来Toast大部分的方法和属性,例如设置时长的 LENGTH_LONG 和 LENGTH_SHORT 属性。
如何使用
让我们看看snackbar是如何使用的:
Snackbar.make(view, message, duration)
.setAction(action message, click listener)
.show();
成员方法:
- make() - 创建一个Snackbar来显示消息
- setAction() - 设置一个动作
- show() - 显示一个Snackbar
属性:
- make() 方法的第一个参数是view, snackbar 将尝试从给定参数的 view 去查找一个父view来持用 snackbar的视图,它将会遍历整个view的数,去找到到一个合适的parent,它可能是一个coordinatorLayout或者window decor的content view 哪一个先出来就哪个。
- 正如前面提到的,duration是一个类似于Toast duration的参数,你能够使用LENGTH_LONG 或者 LENGTH_SHORT
例子:
Snackbar.make(rootlayout, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
.setAction("Undo", new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform anything for the action selected
}
})
.show();
在这里,rootlayout是一个framelayout 它里面有一个FAB, 可以看看FAB例子的layout
点击FAB 查看结果
是的,它成功了,但是用户体验却不好,FAB应该往上移一点,这如下面文档说明的:
当有一个CoordinatorLayout在你的布局中时,应该允许Snackbar有一些特征,例如滑动消失,或者能够自动移动一些像FloatingActionButton这样的控件。
我们将在系列的下一个部分讨论有关于CoordinatorLayout。
Snackbar的可选配置
我们可以使用snackbar的一些额外的配置,setActionTextColor
和setDuration
Snackbar.make(rootlayout, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
.setAction("Undo", new View.OnClickListener() {
@Override
public void onClick(View v) {
// Perform anything for the action selected
}
})
.setActionTextColor(R.color.material_blue)
.setDuration(4000).show();
你能从 https://github.com/PareshMayani/DesignSupportLibraryExamples 上下载到上面的例子
参考文章:
- https://developer.android.com/reference/android/support/design/widget/Snackbar.html
总结
在这个部分,我们讨论了Snackbar,跟Toast消息很类似,但是又更加的灵活了,Snackbar中可以自定义动作,可以将Snackbar滑出屏幕来让其消失并且在一定的时间后会或者用户与屏幕交互后,会自动的消失
通过 CoordinatorLayout我们可以看到更多的effects 和 behaviours,在该系列文章中后续会讨论它。