2016-08-08 13 views
5

Mam snackbar w mojej aktywności appcompat. Ma przycisk OK, który odrzuca snackbar. Działa perfact. ale nie mogę odrzucić paska po przesunięciu palcem (od lewej do prawej).Snackbar nie odwołuje się po przesunięciu

Poniżej mój kod bistrem ....

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(); 

Edycja 1

Mam układ względna jako układ dominującej w układzie XML mojej działalności jest.

Odpowiedz

18

Snackbar potrzebuje elementu CoordinatorLayout jako układu głównego lub innych elementów, na których można wykonywać różne operacje, takie jak przesunięcie do zwolnienia. Musisz mieć to gdzieś w hierarchii układu.

Ponadto widok, który przekazujemy w metodzie Snackbar.make() służy do wyszukiwania elementu CoordinatorLayout w niektórych miejscach hierarchii widoku. Metoda przechodzi z tego widoku do widoku głównego, aby znaleźć element CoordinatorLayout, na którym można wyświetlić pasek przekąski i wykonywać animacje i operacje.

Spróbuj zmienić układ główny na CoordinatorLayout, a problem zostanie rozwiązany.

+4

jest jakiś sposób, aby realizować ten problem z układem liniowym lub jakiegokolwiek innego układu ??? – Intimate

0

s W odpowiedzi na odpowiedź Ashwani Kumar. Widziałem intymnej pytanie, czy istnieje sposób realizacji tego z LinearLayout. Proste zawijanie oryginalnych atrybutów LinearLayout z atrybutami CoordinatorLayout z atrybutami match_parent w android:layout_height i .

to zachowa twoje pierwotne rozmieszczenie i nadal upewni się, że Snackbar można przesuwać.

Snackbar będzie teraz wyglądać tak:

fragmentów -

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

przypadku działań -

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

Zakładając wraped cały układ z CoordinatorLayout i jest to układ korzeniowy.

2

Napisałem bibliotekę, która obsługuje przesuwanie, aby zmniejszyć zachowanie nawet bez dostarczania CoordinatorLayout. Użytkownicy mogą przesuwać palcem w lewo lub w prawo, aby je odrzucić (możesz tylko przesuwać palcem w prawo). Zawiera także progressBar i inne rzeczy. Wypróbuj go https://github.com/tingyik90/snackprogressbar.

Wszystko, co musisz zrobić, to utworzyć pasek SnackProgressBar i zezwolić na przesunięcie w celu odrzucenia. Przykładowy kod:

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

Powiązane problemy