61

来自文档:参数持续时间 - 可以是预定义长度之一:LENGTH_SHORT、LENGTH_LONG或自定义持续时间(以毫秒为单位)。但我无法设置自定义持续时间。

例如

Snackbar
    .make(parentLayout, "Feed cat?", 8000) // try here
    .setAction("Yes", snackOnClickListener)
    .setActionTextColor(Color.MAGENTA)
    .setDuration(8000) // try here
    .show();

但不是 8 秒 Snackbar 很快就消失了。

4

7 回答 7

65

基于 and 的实现SnackbarSnackbarManager我可以确认 Eugene H 的评估:这是一个错误。来自SnackbarManager

private void scheduleTimeoutLocked(SnackbarRecord r) {
    mHandler.removeCallbacksAndMessages(r);
    mHandler.sendMessageDelayed(Message.obtain(mHandler, MSG_TIMEOUT, r),
            r.duration == Snackbar.LENGTH_LONG
                    ? LONG_DURATION_MS
                    : SHORT_DURATION_MS);
}

因此,任何不是LENGTH_LONG的值都会导致短期小吃吧。

我已经提交了一个关于它的问题。

编辑:已在修订版 22.2.1 中修复。在此处查看发行说明

android 文档尚未更新,但如果您跳入源代码,您会注意到方法 setDuration(int duration) 的参数可以是 LENGTH_SHORT、LENGTH_LONG、LENGTH_INDEFINITE或自定义持续时间(以毫秒为单位)之一

于 2015-05-31T00:27:17.523 回答
32

将初始持续时间设置为 LENGTH_INDEFINITE,然后设置您的自定义持续时间:

Snackbar
.make(parentLayout, "Feed cat?", Snackbar.LENGTH_INDEFINITE)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.MAGENTA)
.setDuration(8000)
.show();

编辑

现在直接以毫秒为单位设置一个周期;

Snackbar
.make(parentLayout, "Feed cat?", 8000)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.MAGENTA)
.show();
于 2017-05-16T18:54:10.547 回答
9

自从'com.android.support:design:22.2.1'

您可以将 Snackbar 的持续时间设置为LENGTH_INDEFINITE它会使 Snackbar 显示,直到它被关闭或显示另一个快餐栏。

于 2015-08-27T01:03:18.173 回答
7

这段代码对我来说非常有效,试试这个

Snackbar.make(view, "Hello SnackBar", Snackbar.LENGTH_LONG)
        .setAction("Its Roy", new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        })
        .setDuration(10000)
        .setActionTextColor(getResources().getColor(R.color.colorAccent))
        .show();
于 2015-10-16T13:18:32.080 回答
6

它似乎固定在

compile 'com.android.support:design:22.2.1'

只有 Lint 显示红色下划线,但它有效。

于 2015-08-13T03:51:03.450 回答
5

我为此创建了一个解决方法,我创建了一个使用处理程序和 postDelayed 设置具有自定义持续时间的小吃店的类:

public class SnackBarMaker {

public static void snack(View content, String message, String actionText,  int actionTextColor, View.OnClickListener onClick){
    Snackbar.make(content, message, Snackbar.LENGTH_LONG)
            .setAction(actionText, onClick)
            .setActionTextColor(actionTextColor)
            .show();
}

public static void snackWithCustomTiming(View content, String message, int duration){
    final Snackbar snackbar = Snackbar.make(content, message, Snackbar.LENGTH_INDEFINITE);
    snackbar.show();
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            snackbar.dismiss();
        }
    },duration);
}
}

像这样使用:

  //your duration
   int duration = 4000 
SnackBarMaker.snackWithCustomTiming(getActivity().findViewById(android.R.id.content)
                                               , getString(R.string.your_message), duration);
于 2016-01-03T10:47:25.463 回答
1

你好,试试这个外部库 https://github.com/nispok/snackbar。它已被弃用,但它可以轻松解决您的问题。此外,它易于实施。在支持库之前,我仅将此库用于小吃店。由于支持库的持续时间问题,我很乐意只使用这个库。

于 2015-07-15T12:17:29.050 回答