Wie gehe ich außerhalb von Android mit der Berührung um?

8

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.

    
pixel 22.04.2013, 19:36
quelle

7 Antworten

4

Versuchen Sie, dispatchTouchEvent Ihrer Aktivität zu überschreiben.

%Vor%

aktualisieren

%Vor%     
Ercan 13.05.2013 06:31
quelle
3

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.

    
Aswin Rajendiran 13.05.2013 08:41
quelle
2

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%     
Puru Pawar 09.05.2013 15:01
quelle
0

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.

Aktualisieren

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.

    
Ali 10.05.2013 01:58
quelle
0
%Vor%

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.

    
Mohit Maheshwari 05.02.2014 04:02
quelle
0

Ich war mit keiner der Antworten zufrieden, die ich hier fand. Meine Lösung besteht darin, einen Touch-Listener wie folgt an die Elternansicht anzuhängen:

%Vor%     
Grsmto 31.10.2017 12:19
quelle
-1

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.

%Vor%     
tasomaniac 22.04.2013 20:26
quelle

Tags und Links