Zeichnen Sie über die navigation-bar (und andere apps) auf Android-version >= 5
Ich möchte zu ziehen (Mauszeiger) - Symbol auf dem Bildschirm über anderen Anwendungen, die von einem Dienst. Ich habe implementiert die Funktionalität und ich kann ziehen über den Bildschirm, abgesehen von der Navigationsleiste. Ich habe recherchiert mehrere andere Fragen hier und versucht TYPE_SYSTEM_OVERLAY
, TYPE_TOAST
, TYPE_SYSTEM_ERROR
und einige andere Fenster-Typen ohne Erfolg.
Ich versuche nicht zu erfassen, focus, Zeichnung nur ein Mauszeiger auf dem Bildschirm für eine Sekunde oder zwei. Wenn ich versuche zu zeichnen, über die Navigationsleiste, es geht einfach unter (eigentlich ist das RelativeLayout endet an der Grenze mit der Navigationsleiste - selbst wenn ich angeben manuelle dimension der Höhe). Die Abbildung unten zeigt die hand-Zeiger in der unteren rechten Teil des Bildschirms. Das ist so niedrig, wie ich kann, positionieren Sie es. Beachten Sie, dass ich versuche nicht zu verstecken, die Navigationsleiste in meiner Anwendung versuche zu zeichnen über andere apps.
Ich habe sogar versucht die Einstellung der xpos
und ypos
offset-Einstellungen in WindowManager.LayoutParams
Instanz, aber das gleicht das layout und geht immer noch unterhalb der Navigationsleiste).
Den layout-Parametern, die ich verwende, um zu zeigen, in diesem Fenster:
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
PixelFormat.TRANSPARENT);
Bin ich dann hinzufügen die RelativeLayout
mit diesen Parametern auf der WindowManager: windowManager.addView(relativeLayout, params);
- Haben Sie deklarieren die Erlaubnis
draw over other apps
auf Ihre manifest-Datei? - ja, natürlich. Sonst wäre ich nicht in der Lage zu ziehen alle. Ich kann ziehen fein, über der Statusleiste, nur nicht über die Navigations-Leiste (unten, wo die zurück, home und den letzten softkeys sind)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach viel Gefummel habe ich es geschafft die richtigen flags zu machen, damit es funktioniert. Es fast funktioniert (bei den meisten apps). Den code zu erreichen, folgt (ein Beispiel auf button-Klick-handler):
Hier ist ein screenshot dieser code funktioniert in einer app (Sie können sehen, wie die hand overlay; dies ist auf dem Nexus 5 mit Android 6.0.1:
ISL Light
app (verfügbar auf Play). Ich werde versuchen, fügen Sie einen screenshot in die obige Antwort als gut.Die navigation bar unten ist etwas, das nicht gezogen, weil die Elemente gezeichnet, die oben behindern könnten Zugriff auf die home-Taste, zurück-Taste, etc. Aber Sie können Ihre Tätigkeit auf dem ganzen Bildschirm, was bedeutet, dass es zu verstecken Sie die Navigationstasten, bis Sie von unten nach oben Streifen, so dass Sie frei zu ziehen überall auf dem Bildschirm
EDIT: ich fand einige ähnliche Fragen, und dieser hat eine Antwort : Zeichnen von bitmaps auf die Obere Navigationsleiste in Android
Die Antwort war, fügen Sie einen y-offset ist die Größe der Navigationsleiste.