【发布时间】:2016-08-01 09:54:17
【问题描述】:
我们在我们的应用程序中使用了 Snackbar。但是,当向右滑动时,默认情况下可以将其关闭。是否有一个设置可以在任何水平方向滑动时将其关闭(意味着从左或右方向滑动它) - 以使左撇子也更容易。
【问题讨论】:
我们在我们的应用程序中使用了 Snackbar。但是,当向右滑动时,默认情况下可以将其关闭。是否有一个设置可以在任何水平方向滑动时将其关闭(意味着从左或右方向滑动它) - 以使左撇子也更容易。
【问题讨论】:
这种行为的关键在于,它在所有 Android 手机上的行为方式都相同。这也意味着熟悉 Android 体验的用户,甚至那些看过 Snackbar 并关闭它的用户都知道向右滑动会关闭它。
有一个更改此行为的请求,它可能会获得足够的星数(目前处于中等优先级):https://code.google.com/p/android/issues/detail?id=80102
【讨论】:
Snackbar snackbar = Snackbar.make(fab, "snackbar", Snackbar.LENGTH_SHORT);
snackbar.show();
final Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbar.getView();
snackbar.setDuration(Snackbar.LENGTH_INDEFINITE);
snackbar.show();
snackbarLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams lp = snackbarLayout.getLayoutParams();
if (lp instanceof CoordinatorLayout.LayoutParams) {
((CoordinatorLayout.LayoutParams) lp).setBehavior(new SwipeDismissBehavior<Snackbar.SnackbarLayout>(){
@Override
public boolean canSwipeDismissView(View view) {
return false;
}
});
snackbarLayout.setLayoutParams(lp);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
snackbarLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
snackbarLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
}
});
这段代码对我有用。
【讨论】: