snackbar添加于22.2.0的版本,属于com.android.support:design包下的控件,之所以说它是Toast的升级品,个人觉得原因有两点:1.提示作用比Toast明显,2.比Toast多了一个点击事件及消失时的回调。下面是具体的使用步骤:
一、添加design依赖
implementation 'com.android.support:design:27.1.0'
二、基本用法
Snackbar.make(mVB.cdntlt, "我是snackbar提示内容", Snackbar.LENGTH_SHORT)
.setAction("取消", new View.OnClickListener() {
@Override
public void onClick(View view) {
Logger.e("取消了");
}
})
.addCallback(new BaseTransientBottomBar.BaseCallback<Snackbar>() {
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
super.onDismissed(transientBottomBar, event);
Logger.d("消失原因类型===="+event);
switch (event) {
case DISMISS_EVENT_SWIPE:
//
break;
case DISMISS_EVENT_ACTION:
//点击上面的“取消”按钮后消失
break;
case DISMISS_EVENT_TIMEOUT:
//到时间后自动消失
break;
case DISMISS_EVENT_MANUAL:
//该Snackbar对象调用dismmis()后消失
break;
case DISMISS_EVENT_CONSECUTIVE:
//另外一个新的Snackbar弹出导致消失
break;
}
}
})
.show();
}
从上面的代码中不难看出,当去掉了点击事件setAction和消失回调addCallback的相关代码时,其用法跟Toast几乎一模一样,其中的make方法接收三个参数:
1. 第一个View
一般传入当前界面的根布局View即可。
2.第三个duration
有三个类型:Snackbar.LENGTH_SHORT,Snackbar.LENGTH_LONG和Snackbar.LENGTH_INDEFINITE。前两个跟Toast的一样,都是显示几秒钟后自动消失,第三个会让Snackbar一直挂在屏幕底部,直到调用dismmis()函数或点击其“取消”按钮或新的Snackbar弹出。
可以优化的地方
如果你当前的界面底部布置有FloatingActionButton,那么为了不让Snackbar弹出时覆盖掉FloatingActionButton,你当前界面的根布局应该改为CoordinatorLayout,这样的话,当Snackbar弹出时就会把FloatingActionButton往上顶而不是覆盖掉它了。如图:
需要注意的是,只有CoordinatorLayout和FloatingActionButton搭配使用时才能实现这种效果,即哪怕你的根布局是CoordinatorLayout,但底部是其他控件时,Snackbar弹出时照样会把该控件覆盖掉,而不是往上顶。