2016-08-08 5 views
5

Ich habe eine Snackbar in meiner appcompat Aktivität. Es hat einen Knopf OK, der die snackbar ablehnt. Es arbeitet perfact. aber ich kann die Snackbar beim Wischen nicht verwerfen (von links nach rechts).Snackbar wischt nicht auf Wischen

Im Anschluss an meinem Code für snackbar ....

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

ich in meiner Tätigkeit der XML-Layout Relative Layout als übergeordnetes Layout.

Antwort

18

Snackbar benötigt ein CoordinatorLayout als root-Layout oder einige, wo oben, um seine verschiedenen Operationen wie Wischen zum ablehnen auszuführen. Sie müssen das in Ihrer Layout-Hierarchie haben.

Die Ansicht, die wir in der Methode Snackbar.make() übergeben, wird verwendet, um ein CoordinatorLayout in der Ansichtshierarchie zu suchen. Die Methode wechselt von dieser Ansicht zur Stammansicht, um ein CoordinatorLayout zu finden, über das sie die Snackbar anzeigen und ihre Animationen und Operationen ausführen kann.

Versuchen Sie also, Root-Layout zu CoordinatorLayout zu ersetzen, und Ihr Problem wird gelöst.

+4

ist es eine Möglichkeit, dieses Verhalten mit linearem Layout oder einem anderen Layout zu implementieren ??? – Intimate

0

Als Referenz Ashwani Kumar s Antwort. Ich sah Intime gefragt, ob es eine Möglichkeit gibt, dies mit LinearLayout zu implementieren. Nun einfach wickeln Sie Ihre ursprüngliche LinearLayout mit einem CoordinatorLayout mit in android:layout_height und android:layout_height Attribute.

Dies wird Ihre ursprüngliche Anordnung beibehalten und trotzdem sicherstellen, dass die Snackbar ausschwenkbar ist.

Snackbar wird nun wie folgt aussehen:

Für Fragmente -

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

Für Aktivitäten -

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

Sie wraped Ihre gesamte Layout mit CoordinatorLayout Unter der Annahme, und dies ist die Wurzel-Layout.

2

Ich habe eine Bibliothek geschrieben, die Swipe zu Dimiss-Verhalten unterstützt, auch ohne CoordinatorLayout bereitzustellen. Benutzer können sowohl nach links als auch nach rechts wischen, um sie zu schließen (Sie können nur nach rechts wischen). Es enthält auch progressBar und andere Sachen. Probieren Sie es aus https://github.com/tingyik90/snackprogressbar.

Alles, was Sie tun müssen, ist eine SnackProgressBar erstellen und zulassen, dass Swipe zu entlassen. Beispielcode:

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