我的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布局中将相对布局作为父布局。
答案 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_parent
和android: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());