从0开始认识android(二十四):Toast升级品Snackbar

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根布局不是CoordinatorLayout
需要注意的是,只有CoordinatorLayout和FloatingActionButton搭配使用时才能实现这种效果,即哪怕你的根布局是CoordinatorLayout,但底部是其他控件时,Snackbar弹出时照样会把该控件覆盖掉,而不是往上顶。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值