当用户在其他地方交互时如何关闭 Snackbar,例如 Gmail 应用程序在用户滚动、点击其他地方、离开活动等时关闭 Snackbars 的方式。
Material Design中也提到了这种行为:
当用户在其他地方交互时如何关闭 Snackbar,例如 Gmail 应用程序在用户滚动、点击其他地方、离开活动等时关闭 Snackbars 的方式。
Material Design中也提到了这种行为:
也许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 对此的改进意见。(我还没有测试这个新的稍微编辑过的版本)。
正如您在问题中提供的指南所述:
或其他地方的用户交互(例如召唤新的表面或活动)
在显示快餐栏时,它没有提及有关滑动或点击的任何内容。
换句话说,只要用户保持在同一个活动上,小吃栏就应该在超时后自行消失,或者如果用户故意刷掉它。
此外,我检查了谷歌的 Gmail 应用程序,如果用户在同一屏幕上滑动,快餐栏不会消失。