谷歌官方介绍:
Snackbars provide lightweight feedback about an operation. They show a brief message at the bottom of the screen on mobile and lower left on larger devices. Snackbars appear above all other elements on screen and only one can be displayed at a time.
Snackbars 提供了一个轻量级的操作反馈,它们屏幕的底部显示一个简短的信息和如看是较大的设备就显示在左下方,snackbars出现在屏幕上的所有其他要素之上,只有一个可以同时显示 。
They automatically disappear after a timeout or after user interaction elsewhere on the screen, particularly after interactions that summon a new surface or activity. Snackbars can be swiped off screen.
在超时或者用户在屏幕上完成了交互的时候SnackBar会自动消失,特别是在召唤了新的表层(意思是SnackBar本来是最外层的,然后在SnackBar上又新添加了一层)或者Activity的时候。SnackBar能在屏幕上侧滑。
Snackbars can contain an action which is set via setAction(CharSequence, android.view.View.OnClickListener).
SnackBar能包含一个action使用setAction方法
To be notified when a snackbar has been shown or dismissed, you can provide a Snackbar.Callback via addCallback(BaseCallback).
可以通过CallBack来得知SnackBar是显示还是隐藏
提供的常量:
int LENGTH_INDEFINITE
Show the Snackbar indefinitely.
无限期的展示Snackbar
int LENGTH_LONG
Show the Snackbar for a long period of time.
int LENGTH_SHORT
Show the Snackbar for a short period of time.
Snackbar make (View view,
CharSequence text,
int duration)
此处的make方法于Toast中的make方法类似,唯一区别在第一个传递的参数,此处的SnackBar需要传递的参数为View,SnackBar需要一个View来承载,SnackBar会遍历整个View Tree来找到一个合适的View来承载SnackBar的View,如果需要实现文档上描述的动画效果”such as swipe-to-dismiss and automatically moving of widgets like FloatingActionButton”就需要在布局中包括CoordinatorLayout,如果没有这个布局则就没有这些动画效果。
注意:使用时,如果不使用“<android.support.design.widget.CoordinatorLayout></android.support.design.widget.CoordinatorLayout>”
标签包裹,不会出现文档中所描述的动画效果。
下面的代码基本涵盖了SnackBar的Api,使用起来也还算是比较优雅:
publicclassMainActivityextendsAppCompatActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
publicvoidclick(Viewv){
Snackbar.make(v,"我是一个SnackBar",Snackbar.LENGTH_LONG).setAction("Action",newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
Toast.makeText(MainActivity.this,"Toast",Toast.LENGTH_SHORT).show();
}
}).setActionTextColor(Color.GREEN)//设置SnackBar中点击事件的字体颜色
.setText("文字更新了")//更新SnackBar中提示的文字
.setCallback(callback)//设置一个SnackBar状态的回调
.show();
}
Snackbar.Callbackcallback=newSnackbar.Callback(){
//SnackBar消失的时候调用
@Override
publicvoidonDismissed(Snackbarsnackbar,intevent){
super.onDismissed(snackbar,event);
Log.i("Test","SnackBar隐藏了!");
}
//SnackBar显示的时候调用
@Override
publicvoidonShown(Snackbarsnackbar){
super.onShown(snackbar);
Log.i("Test","SnackBar显示出来了!");
}
};
}
运行结果:
(●’◡’●)