1

当用户在其他地方交互时如何关闭 Snackbar,例如 Gmail 应用程序在用户滚动、点击其他地方、离开活动等时关闭 Snackbars 的方式。

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

在此处输入图像描述

4

2 回答 2

7

也许dispatchTouchEvent在 Activity 中覆盖。

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 和 gicci 对此的改进意见。(我还没有测试这个新的稍微编辑过的版本)。

于 2016-06-05T09:38:27.707 回答
1

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

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

在显示快餐栏时,它没有提及有关滑动或点击的任何内容。

换句话说,只要用户保持在同一个活动上,小吃栏就应该在超时后自行消失,或者如果用户故意刷掉它。

此外,我检查了谷歌的 Gmail 应用程序,如果用户在同一屏幕上滑动,快餐栏不会消失。

于 2016-03-19T20:18:04.453 回答