Как закрыть закусочную, используя свою собственную кнопку действий?



библиотека поддержки дизайна 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).



однако, похоже, нет никакой функции, которая может это сделать.

506   6  

6 ответов:

The .make метод возвращает a

реализовать действие щелчка и пусть он пуст . При нажатии на пустой щелчок действие будет отклонить 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 () звонок в середине.

у меня была та же проблема. Когда я использовал .уволить() анимация выглядела по-разному и было две проблемы:

  1. FAB больше не спускается
  2. сама закусочная не скользить вниз, как это было бы на кнопку

заглянув в исходный код 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

    Ничего не найдено.