Snackbar不会在轻扫时解雇

Int*_*ate 10 android android-snackbar

我的appcompat活动中有一个小吃吧.它有一个按钮OK,可以解开零食吧.它正在工作.但是我不能在轻扫(左到右)时忽略小吃吧.

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

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();
Run Code Online (Sandbox Code Playgroud)

编辑1

我的相对布局作为我的活动的XML布局中的父布局.

Ash*_*mar 28

Snackbar需要一个CoordinatorLayout作为其根布局或一些位于其上面,以执行其各种操作,如轻扫以解除.您需要在布局层次结构中具有某些位置.

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

因此,尝试将根布局替换为CoordinatorLayout,您的问题将得到解决.

  • 有没有办法用线性布局或任何其他布局来实现这种行为? (7认同)

小智 5

作为对Ashwani Kumar回答的参考。我看到Intimate询问是否有办法用 LinearLayout 实现这一点。很简单,用带有match_parentinandroid:layout_heightandroid:layout_width属性的 CoordinatorLayout 包裹你原来的 LinearLayout 。

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

Snackbar 现在看起来像这样:

对于片段 -

Snackbar.make(getView(), "Error Message", Snackbar.LENGTH_INDEFINITE);
Run Code Online (Sandbox Code Playgroud)

对于活动 -

Snackbar.make(this.findViewById(android.R.id.content), "Error Message",  Snackbar.LENGTH_INDEFINITE);
Run Code Online (Sandbox Code Playgroud)

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


tin*_*k90 5

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

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

SnackProgressBar messageType = new SnackProgressBar(
        SnackProgressBar.TYPE_MESSAGE, "Your message")
        .setSwipeToDismiss(true)
Run Code Online (Sandbox Code Playgroud)