如何在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很快消失了。
基于Snackbar
和SnackbarManager
的实现,我可以证实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_LONG
值LENGTH_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 。 它被弃用,但它会很容易解决你的问题。 而且更容易实施。 之前支持库我只使用这个库的小吃店。 由于支持库的持续时间问题,我很高兴只能使用这个库。