首页 文章

当用户在别处进行交互时如何解除Snackbar?

提问于
浏览
0

当用户在其他地方进行互动时如何解除Snackbar,例如Gmail应用程序在用户滚动时点击Snackbars,点击其他地方,离开活动等的方式 .

Material Design中也提到了这种行为:

enter image description here

2 回答

  • 5

    也许在Activity中覆盖 dispatchTouchEvent .

    private Snackbar mSnackbar;
    
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            if (mSnackBar != null && mSnackbar.isShown()) {
    
                    Rect sRect = new Rect();
                    mSnackbar.getView().getHitRect(sRect);
    
                    //This way the snackbar will only be dismissed if
                    //the user clicks outside it.
                    if (!sRect.contains((int)ev.getX(), (int)ev.getY())) {
                        mSnackbar.dismiss();
                        mSnackbar == null;
                    }
            }
        }
    
        return super.dispatchTouchEvent(ev);
    }
    

    感谢Eme对此进行改进的评论 . (我没有测试这个新的略微编辑的版本) .

  • 1

    正如您在问题中提供的指南所述:

    或其他地方的用户交互(例如召唤新的表面或活动)

    在显示快餐栏时,它没有提及任何关于滑动或点击的信息 .

    换句话说,只要用户保持相同的活动,零食栏应该在超时后自行消失,或者如果用户将其滑动掉 .

    此外,我检查了谷歌的Gmail应用程序,如果用户在同一屏幕上滑动,小吃店也不会消失 .

相关问题