如何在SnackBar中使用setDuration()方法(Androiddevise支持库)

From Documentation:参数持续时间 – 可以是预定义长度之一: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很快消失了。

基于SnackbarSnackbarManager的实现,我可以证实Eugene H的评价:这是一个bug。 从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_LONGLENGTH_LONG导致一个短暂的快餐栏。

我已经提出了一个问题 。

编辑 :修订22.2.1已经修复。 在这里查看发行说明

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

由于'com.android.support:design:22.2.1'

您可以将您的LENGTH_INDEFINITE的持续时间设置为LENGTH_INDEFINITE这将使LENGTH_INDEFINITE显示,直到它被解散或显示另一个小吃店。

这似乎是固定的

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

只有林特显示它红色下划线,但它的作品。

将初始持续时间设置为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(); 

我为此创build了一个工作,我做了一个类,它使用处理程序和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); 

这个代码完美的工作,试试这个

 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(); 

你好,请尝试https://github.com/nispok/snackbar 。 它被弃用,但它会很容易解决你的问题。 而且更容易实施。 之前支持库我只使用这个库的小吃店。 由于支持库的持续时间问题,我很高兴只能使用这个库。