Wie zu handhaben, berühren Sie eine Stelle außerhalb der Ansicht in Android?
Habe ich gefunden, die Umsetzung von "Rückgängig" - Funktion Bar" verwendet in der Gmail-Anwendung für Android. "UndoBar" ist im Grunde eine Ansicht, die angezeigt wird auf der Oberseite des layout.
Leider ist es nicht vollständig, es hat keine Funktionalität Abberufung bar durch berühren Bildschirm vor der bar.
Habe ich umgesetzt FrameLayout
überschreiben onInterceptTouchEvent
zu handhaben bar entlassen, aber bewegende Action Bar bringt nichts.
Gibt es eine Möglichkeit, um solche Ereignisse aus der Action-Bar?
Unten dort ist ein Bild mit "UndoBar"gezeigt. Was ich erreichen möchte, zu handhaben, berühren Sie in der Aktionsleiste vertreten durch red dot.
- "es hat keine Funktionalität Abberufung bar durch berühren Bildschirm vor der bar". Können Sie erklären, was ein "bar" ist ?
- Es ist nur eine Ansicht, genau, es ist ein
LinearLayout
. - Ich verstehe das nicht. Sie möchten, ändern Sie Ihre Sichtbarkeit ? Können Sie fügen Sie entsprechenden code-Schnipsel?
- Nein, ich möchte zu handhaben, berühren Sie außerhalb dieser Ansicht, insbesondere in der ActionBar. Ich habe kleine anzeigen und Aktivität mit der Aktion bar. In der Gmail-Anwendung, wenn Sie die Nachricht löschen eine "UndoBar" wird angezeigt, wenn Sie klicken Sie auf anywhere - action-bar, hintergrund, etc. UndoBar verschwindet. Ich hätte gerne das gleiche Verhalten.
- Implementieren Sie eine scroll-listener auf der
ListView
dann auf Blättern nennenhideUndoBar(true)
das sollte es tun. Es ist nicht wirklich eine Berührung, aber nur die geringste Menge an Blättern entfernen Sie die undo-bar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen zu überschreiben dispatchTouchEvent Ihrer Tätigkeit.
update
Zu fangen, touch-Ereignisse für den gesamten Bildschirm, einschließlich der ActionBar hinzufügen einer Ansicht auf das Fenster zu.
Hoffe, das hilft.
Haben Sie versucht, eine
onTouchEvent
auf Ihre FrameLayout..?Ich habe es nicht versucht, aber ich denke, es macht Sinn für mich, dass im Falle des
MotionEvent
auf das layoutACTION_OUTSIDE
Aktion sollte gefeuert.Versuchen Sie die folgenden.
FrameLayout
aber es behandelt nicht berührt ActionBarGibt es 2 mögliche Lösungen.
Als ich erwähnte in den Kommentaren können Sie entweder implementieren Sie eine scroll-Hörer auf Ihre
ListView
und einfach genannthideUndoBar(true)
auf den kleinsten Blättern.ODER
Können Sie ändern Sie die
UndoBarController
. Sie werden bemerken, dass der undo-bar ist einfach einView
schlagen eineOnFocusChange
Hörer auf dieView
im Konstruktor und in der show-Methode setFocus der Ansicht.In Ihrem
OnFocusChange
überprüfen, um zu sehen, ob die Ansicht den Fokus verloren hat, und rufenhideUndoBar(true)
.Update
Habe ich einen Gist hier https://gist.github.com/atgheb/5551961
zeigt wie zum ändern der
UndoBarController
um die Funktion hinzufügen, wo es versteckt wird, wenn es den Fokus verliert.Habe ich noch nicht testen, aber ich sehe nicht ein, warum es nicht funktionieren wird.
was Sie eigentlich brauchen ist :
Dokumentation sagt:
Ich nicht zufrieden war mit keiner der Antworten, die ich hier gefunden. Meine Lösung ist das Anhängen einer touch-listener an die übergeordnete Ansicht etwa so:
Sollten Sie nur überschreiben Aktivität dispatchTouchEvent(ev: MotionEvent) - Methode
Blick auf dieses Beispiel der Entlassung unbestimmt Snackbar
Oder schauen Sie sich die vollständige gist
Können Sie die touch-Ereignisse in Ihrem
Activity
mithilfe der folgenden code. Ich denke, dieser code würde die Berührung vonActionBar
als gut.MotionEvents