Snackbar的持续时间和高度

26

我想展示一个Snackbar。

在我点击手势检测器后,这个小吃有两个按钮。

问题是 Snackbar 出现了几秒钟然后就消失了。

所以我有两个问题:

  1. 如何防止 Snackbar 在用户采取行动并点击按钮之前消失?
  2. 此外,Snackbar 具有整个屏幕的高度。
    如何使它在屏幕底部具有特定的高度?

2
在故障排除时,分享相关代码片段是个好主意,这样我们可以帮助您找出如何解决问题。 - Corina
4个回答

48

您可以使用长时间 duration

HomeScreen.scaffoldKey.currentState.showSnackBar(
    SnackBar(duration: const Duration(minutes: 5), content: Text(message)));

另请参见https://material.io/design/components/snackbars.html#behavior

出现和消失

Snackbars会突然出现,无需用户交互。它们会自动在屏幕上停留至少4秒,最多10秒后消失。


谢谢您的回复。我考虑过这个问题,但即使用户点击按钮,它也不会消失,它将在整个持续时间内保留,这不是我想要的。 - Mee
3
在按钮的 onPressed: ... 中,您可以调用 ScaffoldStatehideCurrentSnackBar(...) 方法来移除当前的 Snackbar。文档链接:https://docs.flutter.io/flutter/material/ScaffoldState/hideCurrentSnackBar.html - Günter Zöchbauer
我怎样才能在ScaffoldState上调用它? - Mee
使用一个传递给Scaffold的GlobalKey。 - Günter Zöchbauer

10

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。仅有链接的答案如果链接页面更改可能会变得无效。-【来自评论】 - Tal Z
我的错,我添加了更多细节。 - Eyewritecode
4
"Scaffold.of(context).hideCurrentSnackBar();"已经被弃用,最新的是"ScaffoldMessenger.of(context).hideCurrentSnackBar();"。谢谢。 - Kamlesh

-2

您可以通过设置不同的最大行数(通常默认为2)来更改 Snackbar 的高度:

您可以像这样进行操作(例如,设置为10行):

 View snackbarView = snackbar.getView();
            TextView snackTextView = (TextView) snackbarView.findViewById(
            com.google.android.material.R.id.snackbar_text);

            snackTextView.setMaxLines(10);
            snackbar.show();

-4
final Snackbar snack = Snackbar.make(findViewById(android.R.id.content),  helpMsg, Snackbar.LENGTH_INDEFINITE);
snack.setAction("OK", new View.OnClickListener() {
       @Override
       public void onClick(View v) {
          // Respond to the click dismiss is automatic with this

           }
});
View view = snack.getView();
FrameLayout.LayoutParams params =(FrameLayout.LayoutParams)view.getLayoutParams();
params.gravity = Gravity.TOP;
view.setLayoutParams(params);
snack.show();

你能展示一下你的代码吗?这样我们就可以看到为什么会出现整个页面的显示。 - JDPearlman
3
你仔细阅读了问题标签吗?没有androidjava标签。 - Andrii Turkovskyi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接