【问题标题】:Android - Snackbar - allow to be dismissed any horizontal directionAndroid - Snackbar - 允许在任何水平方向关闭
【发布时间】:2016-08-01 09:54:17
【问题描述】:

我们在我们的应用程序中使用了 Snackbar。但是,当向右滑动时,默认情况下可以将其关闭。是否有一个设置可以在任何水平方向滑动时将其关闭(意味着从左或右方向滑动它) - 以使左撇子也更容易。

【问题讨论】:

    标签: android android-snackbar


    【解决方案1】:

    这种行为的关键在于,它在所有 Android 手机上的行为方式都相同。这也意味着熟悉 Android 体验的用户,甚至那些看过 Snackbar 并关闭它的用户都知道向右滑动会关闭它。

    有一个更改此行为的请求,它可能会获得足够的星数(目前处于中等优先级):https://code.google.com/p/android/issues/detail?id=80102

    【讨论】:

      【解决方案2】:
      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);
                          }
                      }
                  });
      

      这段代码对我有用。

      【讨论】:

      • 这段代码不起作用,除非您将“canSwipeDismissView”编辑为“return true;”它也打破了被解雇事件的回调。
      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 2016-05-23
      相关资源
      最近更新 更多