如何使用它自己的操作button来closures小吃店?
Androiddevise支持库现在包含对Snackbar的支持。
我用下面的代码来创build一个:
Snackbar.make(findViewById(R.id.root_layout), result, Snackbar.LENGTH_LONG) .setAction("Dismiss", new View.OnClickListener() { @Override public void onClick(View v) { } }).show();
小吃店可以通过刷卡解雇。 不过,我也想使用自己的Action Button(使用setAction函数创build)来解除它。
但是,似乎没有任何可以做到的function。
.make
方法返回一个Snackbar
对象。 通过使其final
保存该对象的实例。 然后,在onClick()
中调用.dismiss
:
final Snackbar snackBar = Snackbar.make(findViewById(R.id.root_layout), result, Snackbar.LENGTH_LONG); snackBar.setAction("Dismiss", new View.OnClickListener() { @Override public void onClick(View v) { snackBar.dismiss(); } }); snackBar.show();
实施一个点击动作,并让其为空。 点击空白点击动作将closures快餐栏。
Snackbar.make(coordinatorLayoutView, "Service Enabled", Snackbar.LENGTH_LONG) .setAction("DISMISS", new View.OnClickListener() { @Override public void onClick(View v) { } }) .show();
当你使用Snackbar.LENGTH_LONG
你不需要操作button来解雇,第二次自动解雇后。 你应该使用这个代码:
Snackbar snackbar = Snackbar.make(relativeLayout, "Your Message", Snackbar.LENGTH_INDEFINITE); snackbar.setAction("dismiss", new View.OnClickListener() { @Override public void onClick(View v) { snackbar.dismiss(); } }); snackbar.show();
小心这一行 :
Snackbar.LENGTH_INDEFINITE
这是一个古老的问题,但我只想分享我自己的经验,在小吃店的类似function。 因此,我们为我们的应用程序devise了一个小吃棒应该无限期地显示,用户应该能够解雇它。但是里面不应该有DISMISSbutton(Google不build议在小吃店里面放弃或取消操作)。 我们的小吃店只能通过点击而被解雇。
唯一的解决scheme,为我们工作,最后(我在这里使用retrolambda,但也可以使用标准的View.OnClickListener):
final Snackbar snack = ... /* create proper snackbar as alway */ snack.getView().setOnClickListener(v -> snack.dismiss());
注意getView()调用中间;)希望它可以帮助别人,有一天:)
最好的祝福,
Darek
我有同样的问题。 当我使用.dismiss()的animation看起来不同,有两个问题:
- FAB不会再次下降
- SnackBar本身不会像点击一样滑落
查看最初的Android Snipbar源代码我find了以下解决scheme:
View snackbarView = snackbar.getView(); Button snackbarActionButton = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action); //snackbarActionButton.setSoundEffectsEnabled(false); // might be considered in order not to have a confusing sound because nothing was clicked by the user
然后,我会调用snackBarActionButton上的.performClick
snackBarActionButton.performClick();
链接到Snackbar的Android源代码: https ://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/design/src/android/support/design/widget/Snackbar.java
零食(来自'com.android.support:design:23.2.1' )支持许多types的解雇行动。 您可以使用事件来创build一个简单的filter,例如:
Snackbar.make(view, wornMessage, Snackbar.LENGTH_LONG).setActionTextColor(context.getResources().getColor(R.color.primary)) .setCallback(new Snackbar.Callback() { @Override public void onShown(Snackbar snackbar) { super.onShown(snackbar); // when snackbar is showing } @Override public void onDismissed(Snackbar snackbar, int event) { super.onDismissed(snackbar, event); if (event != DISMISS_EVENT_ACTION) { //will be true if user not click on Action button (for example: manual dismiss, dismiss by swipe } } }) .setAction("Undo, view1 -> { // if user click on Action button }).show();
小吃店的解雇types:
/** Indicates that the Snackbar was dismissed via a swipe.*/ public static final int DISMISS_EVENT_SWIPE = 0; /** Indicates that the Snackbar was dismissed via an action click.*/ public static final int DISMISS_EVENT_ACTION = 1; /** Indicates that the Snackbar was dismissed via a timeout.*/ public static final int DISMISS_EVENT_TIMEOUT = 2; /** Indicates that the Snackbar was dismissed via a call to {@link #dismiss()}.*/ public static final int DISMISS_EVENT_MANUAL = 3; /** Indicates that the Snackbar was dismissed from a new Snackbar being shown.*/ public static final int DISMISS_EVENT_CONSECUTIVE = 4;
PS在示例代码中使用lambdaexpression式(由RetroLambda)