2016-08-08 3 views
5

У меня есть закусочная в моей 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 моей деятельности в.

ответ

18

Закусочная нуждается в координатореLayout в качестве корневой компоновки или где-то там, где она находится поверх нее, для выполнения различных операций, таких как прокрутка для удаления. У вас должно быть такое, где в иерархии макета.

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

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

+4

есть ли способ осуществить это поведение с линейной планировкой или любой другой макет ??? – Intimate

0

В качестве ссылки на Ashwani Kumar s ответ. Я видел Intimate спросил, есть ли способ реализовать это с помощью LinearLayout. Ну, просто оберните свой оригинальный LinearLayout координаторомLayout с match_parent в android:layout_height и android:layout_height атрибутов.

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

Snackbar теперь будет выглядеть следующим образом:

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

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

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

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

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

2

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

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

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

Смежные вопросы