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

时间:2016-03-19 16:47:49

标签: android material-design android-snackbar snackbar

当用户在其他地方进行互动时,如何关闭Snackbar,例如Gmail应用在用户滚动时点击Snackbars,点击其他地方,离开活动等等。

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

enter image description here

2 个答案:

答案 0 :(得分:6)

也许在活动中覆盖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 :(得分:1)

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

  

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

在显示小吃栏时,没有提及滑动或点击的任何内容。

换句话说,只要用户保持相同的活动,小吃栏应该在超时后消失,或者如果用户将其删除掉。

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