Snackbar不会在轻扫时解雇

时间:2016-08-08 07:46:07

标签: 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();

修改1

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

4 个答案:

答案 0 :(得分:27)

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

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:1)

参考 Ashwani Kumar 的回答。 我看到 Intimate 询问是否有办法使用LinearLayout实现此功能。简单地用CoordinatorLayout包装原始的LinearLayout match_parentandroid:layout_height属性中的android:layout_height

这将保留您的原始安排,并仍然确保Snackbar可以移动。

Snackbar现在看起来像这样:

对于片段 -

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

对于活动 -

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

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

答案 3 :(得分:0)

我的GLSurfaceView游戏中的零食不会通过滑动消除,并且用户可能不知道要滑动。下面的代码行会在任何碰触状态下关闭Snackbar。至关重要的是,我发现用户是否确实碰巧按下了操作按钮(如果有的话),无论设置为执行什么操作,仍然可以执行。整体解雇不会阻碍。

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