2016-05-24 12 views
0

Sorry für den langen Titel. Ich möchte grundsätzlich ein SurfaceView als ein Fenster hinzufügen, das über allen Fenstern, aber nicht über der Benachrichtigungsleiste angezeigt wird (selbst wenn es nach unten gezogen wird). Der Code, den ich derzeit habe, ist:Android: Platzieren Sie nicht klickbare Ansicht über alle Anwendungsfenster, aber unter Benachrichtigungsleiste

Dies funktioniert perfekt, außer es platziert die Ansicht über der Benachrichtigungsleiste. Wenn ich stattdessen TYPE_SYSTEM_ALERT verwende, kann ich die gewünschte Z-Reihenfolge erreichen, aber dann reagiert meine Anwendung nicht auf Benutzereingaben. Ich habe dann das Flag FLAG_NOT_TOUCHABLE hinzugefügt, das es dem Benutzer dann ermöglicht, mit den Anwendungskomponenten wie gewünscht zu interagieren. Jedoch antworten dann die Zurück-Schaltfläche und die Task-Manager-Schaltfläche auf dem Telefon nicht.

Gibt es trotzdem das gewünschte Verhalten? Ich hoffe, ich habe es klar genug gemacht, es ist ein bisschen schwierig in Worten zu beschreiben, was ich gerne hätte. Vielen Dank!

Antwort

0

Gelöst!

WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
       WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | 
         WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | 
         WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 
         WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
         WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, 
       PixelFormat.TRANSLUCENT); 

TYPE_SYSTEM_ALERT sorgt dafür, dass das System Benachrichtigungsleiste oberhalb meiner Sicht bleibt. FLAG_NOT_TOUCH_MODAL ermöglicht Touch-Ereignisse zu den Fenstern hinter der Ansicht gesendet werden; und FLAG_NOT_TOUCHABLE und FLAG_NOT_FOCUSABLE sicherstellen, dass die Ansicht keine Berührungs- oder Schlüsselereignisse empfängt.