Ich habe die Implementierung von "Rückgängig-Leiste" in Google Mail gefunden Anwendung für Android. "UndoBar" ist im Grunde eine Ansicht, die über dem Layout angezeigt wird.
Leider ist es nicht vollständig - es hat keine Funktion, die Leiste zu verwerfen, indem Sie den Bildschirm außerhalb der Leiste berühren.
Ich habe FrameLayout
implementiert, das onInterceptTouchEvent
überschreibt, um das Abweisen von Balken zu behandeln, aber das Berühren der Aktionsleiste tut nichts.
Gibt es eine Möglichkeit, solche Ereignisse über die Aktionsleiste zu behandeln?
Unten ist ein Bild mit "UndoBar" zu sehen. Was ich erreichen möchte, um die Berührung in der Aktionsleiste durch den roten Punkt dargestellt zu behandeln.
Um Berührungsereignisse für den gesamten Bildschirm einschließlich der ActionBar zu erfassen, fügen Sie dem Fenster eine Ansicht hinzu.
%Vor%Hoffe, das hilft.
Haben Sie versucht, ein onTouchEvent
auf Ihrem FrameLayout ..?
Ich habe es nicht ausprobiert, aber ich denke, es macht für mich Sinn, dass im Falle von MotionEvent
auf diesem Layout ACTION_OUTSIDE
action ausgelöst werden sollte.
Versuchen Sie Folgendes.
%Vor%Es gibt 2 mögliche Lösungen.
Wie ich in den Kommentaren erwähnt habe, können Sie entweder einen Scroll-Listener auf Ihrer ListView
und einfach mit hideUndoBar(true)
bei der geringsten Scrollfunktion implementieren.
ODER
Sie können die UndoBarController
ändern. Sie werden feststellen, dass die Rückgängig-Leiste einfach ein View
slap ein OnFocusChange
Listener auf die View
im Konstruktor und in der show-Methode setFocus auf die Ansicht ist.
Überprüfen Sie in Ihrer OnFocusChange
, ob die Ansicht den Fokus verloren hat, und rufen Sie hideUndoBar(true)
auf.
Ich habe hier einen Gist erstellt Ссылка
zeigt, wie man UndoBarController
ändert, um das Feature hinzuzufügen, wo es sich versteckt, wenn es den Fokus verliert.
Ich habe es nicht getestet, aber ich sehe nicht, warum es nicht funktioniert.
Was Sie eigentlich brauchen, ist:
%Vor%Dokumentation sagt:
Window-Flag: Wenn Sie FLAG_NOT_TOUCH_MODAL gesetzt haben, können Sie dies einstellen Flag, um ein einzelnes spezielles MotionEvent mit der Aktion zu erhalten MotionEvent.ACTION_OUTSIDE für Berührungen außerhalb Ihres Fenster.
Sie können alle Berührungsereignisse in Ihrem Activity
erhalten, indem Sie den folgenden Code verwenden. Ich denke, dieser Code würde auch die Berührungen von ActionBar
bekommen.