Закусочная не увольняет на свайпе


У меня есть закусочная в моей деятельности appcompat. В нем есть кнопка "ОК", закрыть закусочную.Он работает покраснели. но я не могу отмахнуться от закусочной на салфетке (слева направо).

Ниже приведен мой код для закусочной....

final Snackbar snackbar = Snackbar
                                .make(view, "Error Message", Snackbar.LENGTH_INDEFINITE);

                        snackbar.setAction("OK", new View.OnClickListener() {
                                    @Override
                                    public void onClick(View view) {
                                            snackbar.dismiss();
                                    }
                                });

                        snackbar.show();

Edit 1

У меня есть относительный макет в качестве родительского макета в XML-макете моей деятельности.

3 6

3 ответа:

Snackbar нуждается в CoordinatorLayout в качестве корневого макета или в некоторых местах поверх него, чтобы выполнять различные операции, такие как размах для удаления. Вы должны иметь это где-то в иерархии вашего макета.

Далее вид, который мы проходим в закусочной.метод make() используется для поиска CoordinatorLayout где-то в иерархии представлений. Метод переходит от этого представления к корневому представлению, чтобы найти CoordinatorLayout, над которым он может показать закусочную и выполнить ее анимацию и оперативный.

Поэтому попробуйте заменить корневой макет на CoordinatorLayout, и ваша проблема будет решена.

Я написал библиотеку, которая поддерживает swipe to dimiss поведение даже без предоставления CoordinatorLayout. Пользователи могут провести как влево, так и вправо, чтобы отклонить его (первоначально вы можете только провести вправо). Он также включает в себя progressBar и другие вещи. Попробуйте https://github.com/tingyik90/snackprogressbar .

Все, что вам нужно сделать, это создать SnackProgressBar и разрешить swipe отклонить. Пример кода:

SnackProgressBar messageType = new SnackProgressBar( SnackProgressBar.TYPE_MESSAGE, "Your message") .setSwipeToDismiss(true)

В качестве ссылки на ответ Ашвани Кумара. Я видел интимный вопрос, есть ли способ реализовать это с помощью LinearLayout. Ну просто оберните свой оригинальный LinearLayout с CoordinatorLayout с match_parent в атрибутах android:layout_height и android:layout_height.

Это сохранит ваше первоначальное расположение и по-прежнему убедитесь, что закусочная является swipable.

Закусочная теперь будет выглядеть так:

Для фрагментов -

Snackbar.make(getView(), "Error Message", Snackbar.LENGTH_INDEFINITE);

Для деятельности -

Snackbar.make(this.findViewById(android.R.id.content), "Error Message",  Snackbar.LENGTH_INDEFINITE);

Предполагая, что вы обернул весь ваш макет с CoordinatorLayout, и это корневой макет.