Как закрыть закусочную, используя свою собственную кнопку действий?
библиотека поддержки дизайна Android теперь включает поддержку Snackbar.
я использовал следующий код для его создания:
Snackbar.make(findViewById(R.id.root_layout), result, Snackbar.LENGTH_LONG)
.setAction("Dismiss", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}).show();
закусочная может быть отклонена с помощью салфетки. Однако я также хочу уволить его, используя свою собственную кнопку действия (созданную с помощью функции setAction).
однако, похоже, нет никакой функции, которая может это сделать.
6 ответов:
реализовать действие щелчка и пусть он пуст . При нажатии на пустой щелчок действие будет отклонить snackbar .
Snackbar.make(coordinatorLayoutView, "Service Enabled", Snackbar.LENGTH_LONG) .setAction("DISMISS", new View.OnClickListener() { @Override public void onClick(View v) { } }) .show();
при использовании
Snackbar.LENGTH_LONGвам не нужна кнопка действия для увольнения, после второго автоматического увольнения. Вы должны использовать этот код :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
Это старый вопрос, но я просто хочу поделиться своим опытом по подобной функции на закусочной. Таким образом, мы получили дизайн для нашего приложения, что закусочная должна быть показана на неопределенный срок, и пользователь должен иметь возможность отклонить его.. но там не должно быть кнопки увольнения внутри него (Google не рекомендует увольнять или отменять действия внутри закусочных в любом случае). Нашу закусочную пришлось закрыть, просто постучав по ней.
единственное решение, работающее на нас, было в конце концов (я использую ретроламбда здесь, но стандартный вид.OnClickListener может быть использован также):
final Snackbar snack = ... /* create proper snackbar as alway */ snack.getView().setOnClickListener(v -> snack.dismiss());Примечание getView () звонок в середине.
у меня была та же проблема. Когда я использовал .уволить() анимация выглядела по-разному и было две проблемы:
- FAB больше не спускается
- сама закусочная не скользить вниз, как это было бы на кнопку
заглянув в исходный код Android для Snackbar я нашел следующее решение:
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тогда, я бы назвал .performClick на snackBarActionButton
snackBarActionButton.performClick();ссылка на Android исходный код для закусочной: https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/design/src/android/support/design/widget/Snackbar.java
закусочная (с 'com.андроид.поддержка:дизайн:23.2.1') поддержка многих типов увольнения действий. Вы можете создать простой фильтр, с помощью событие, например, в этом примере:
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();типы увольнения закусочной:
/** 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;P. S. В образце кода используется лямбда-выражения (по RetroLambda)
Comments