Snackbar 不会在滑动时关闭

Snackbar is not dismissing on swipe

我的 appcompat activity 中有一个小吃店。它有一个 OK 按钮,可以关闭 snackbar.It 正在运行的 perfact。但我无法通过滑动(从左到右)关闭小吃店。

以下是我的小吃店代码....

final Snackbar snackbar = Snackbar
                                .make(view, "Error Message", Snackbar.LENGTH_INDEFINITE);

                        snackbar.setAction("OK", new View.OnClickListener() {
                                    @Override
                                    public void onClick(View view) {
                                            snackbar.dismiss();
                                    }
                                });

                        snackbar.show();

编辑 1

我在 activity 的 XML 布局中将相对布局作为父布局。

Snackbar 需要一个 CoordinatorLayout 作为其根布局或位于其顶部的某个位置,以执行其各种操作,如滑动以关闭。您需要在布局层次结构中的某个位置。

此外,我们在 Snackbar.make() 方法中传递的视图用于在视图层次结构中的某个位置搜索 CoordinatorLayout。该方法从此视图遍历到根视图以找到 CoordinatorLayout,它可以在其上显示快餐栏并执行其动画和操作。

所以尝试将根布局替换为 CoordinatorLayout,您的问题将得到解决。

参考 Ashwani Kumar 的回答。 我看到Intimate问有没有办法用LinearLayout实现这个。很简单,用 CoordinatorLayout 包装你原来的 LinearLayout match_parentandroid:layout_heightandroid:layout_width 属性中。

这将保留您的原始排列,并仍然确保 Snackbar 是可滑动的。

Snackbar 现在看起来像这样:

对于片段 -

Snackbar.make(getView(), "Error Message", Snackbar.LENGTH_INDEFINITE);

对于活动-

Snackbar.make(this.findViewById(android.R.id.content), "Error Message",  Snackbar.LENGTH_INDEFINITE);

假设您用 CoordinatorLayout 包装了整个布局,这是根布局。

我编写了一个库,即使不提供 CoordinatorLayout 也支持滑动以关闭行为。用户可以向左或向右滑动以关闭它(您最初只能向右滑动)。它还包括 progressBar 和其他东西。试试看 https://github.com/tingyik90/snackprogressbar.

您需要做的就是创建一个 SnackProgressBar 并允许滑动关闭。示例代码:

SnackProgressBar messageType = new SnackProgressBar(
        SnackProgressBar.TYPE_MESSAGE, "Your message")
        .setSwipeToDismiss(true)

我的 GLSurfaceView 游戏中的 Snackbars 不会通过滑动关闭,如果用户滑动了,可能也不知道要滑动。下面的一行代码通过任何触摸栏来关闭 Snackbar。至关重要的是,我发现如果用户确实碰巧按下了操作按钮(如果有的话),无论它设置为做什么操作,它仍然会执行。整体解雇不会妨碍。

snackbar.getView().setOnClickListener(view -> snackbar.dismiss());