来自文档:参数持续时间 - 可以是预定义长度之一: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很快就消失了。
答案 0 :(得分:58)
根据Snackbar
和SnackbarManager
的实施情况,我可以确认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
的值都会导致短期小吃吧。
我已经提交了an issue。
编辑:已在修订版22.2.1中修复。查看发行说明here
Android文档已经 NOT 已更新,但是如果你跳转到源代码,你会注意到方法setDuration(int duration)的参数可以是LENGTH_SHORT,LENGTH_LONG之一, LENGTH_INDEFINITE 或自定义持续时间(以毫秒为单位)
答案 1 :(得分:14)
将初始持续时间设置为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();
答案 2 :(得分:6)
似乎已修复
compile 'com.android.support:design:22.2.1'
只有Lint显示红色下划线,但它有效。
答案 3 :(得分:5)
我为此创建了一个解决方案,我创建了一个类,使用handler和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);
答案 4 :(得分:3)
这段代码非常适合我试试这个
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();