2016-03-19 13 views

Antwort

1

da die Richtlinien, die Sie in Ihrer Frage Zustand zur Verfügung gestellt:

oder Interaktion mit dem Benutzer an anderer Stelle (wie eine Beschwörungs neue Oberfläche oder Aktivität)

Es wird nichts über Wischen oder Klicken erwähnt, während die Snackbar angezeigt wird.

Mit anderen Worten, solange der Benutzer auf der gleichen Aktivität bleibt, sollte die Snackbar nach einer Zeitüberschreitung oder wenn der Benutzer delibaretly es abzieht einfach verschwinden.

Außerdem habe ich Googles Google Mail App überprüft und die Snackbars verschwinden nicht, wenn der Benutzer auf dem gleichen Bildschirm wischt.

+1

Es heißt eindeutig "wie ...", nicht nur das Aufrufen einer neuen Aktivität, sondern auch das Klicken, Scrollen, Verlassen usw. sind Benutzerinteraktionen und die Google Mail App schließt Snackbars sofort (vor dem Timeout), wenn Sie einen Scroll-Vorgang ausführen wo auf dem Bildschirm. – Hafez

3

Vielleicht überschreiben dispatchTouchEvent in Aktivität.

private Snackbar mSnackbar; 

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 

    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     if (mSnackBar != null && mSnackbar.isShown()) { 

       Rect sRect = new Rect(); 
       mSnackbar.getView().getHitRect(sRect); 

       //This way the snackbar will only be dismissed if 
       //the user clicks outside it. 
       if (!sRect.contains((int)ev.getX(), (int)ev.getY())) { 
        mSnackbar.dismiss(); 
        mSnackbar == null; 
       } 
     } 
    } 

    return super.dispatchTouchEvent(ev); 
} 

Dank Emes Kommentar für Verbesserungen zu diesem. (Ich habe diese neue leicht editierte Version nicht getestet).

+0

Thx man..es hat gut funktioniert – satti8893

+0

Gern geschehen! Ich bin froh, dass es nützlich war. –

+0

Sie brauchen keine Aktualisierung 'mSnackbarShown', Sie können die isShown-Methode der SnackBar verwenden, auf diese Weise müssen Sie den Rückruf nicht setzen, nur mit dem DispatchTouchEvent ist gültig. – Eme

Verwandte Themen