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_parent
在 android:layout_height
和 android: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());
我的 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_parent
在 android:layout_height
和 android: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());