Der Android WindowManager ist ein Systemdienst, der für die Verwaltung der Z-Order-Liste der Windows verantwortlich ist, die Windows sichtbar sind und wie sie auf dem Bildschirm angelegt werden. Unter anderem führt es automatisch Fensterübergänge und Animationen durch, wenn sie eine App öffnen oder schließen oder den Bildschirm drehen.
Jede Aktivität verfügt über ein Fenster, mit dem der Inhalt auf dem Bildschirm angezeigt wird. Wenn Sie SetContentView bei einer Aktivität aufrufen, wird diese Ansicht zum Standardfenster der Aktivität angeschlossen. Das Standardfenster füllt den Bildschirm aus, so dass das Fenster Ihrer Aktivität alle anderen Aktivitäten verbirgt - der WindowsManager zeigt an, welches Fenster oben ist. Normalerweise müssen Sie sich also keine Sorgen um Windows machen - Sie erstellen nur eine Aktivität und Android macht den Rest für Sie.
Sie müssen jedoch mit dem WindowsManager interagieren, wenn Sie etwas Ungewöhnliches tun möchten, wie schwimmende Fenster zu erstellen, die den Bildschirm nicht füllen. Wenn Sie ein schwimmendes Fenster erstellen möchten, das vor anderen Anwendungen sichtbar ist, können Sie keine Aktivität verwenden, da Ihre Aktivität aufhört, wenn eine andere App in den Vordergrund steht und sein Fenster verborgen oder zerstört wird. Stattdessen müssen Sie ein Fenster aus einem Hintergrunddienst anzeigen. Zum Beispiel:
WindowManager.LayoutParams p = new WindowManager.LayoutParams(
// Shrink the window to wrap the content rather than filling the screen
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
// Display it on top of other application windows, but only for the current user
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
// Don't let it grab the input focus
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
// Make the underlying application window visible through any transparent parts
PixelFormat.TRANSLUCENT);
// Define the position of the window within the screen
p.gravity = Gravity.TOP | Gravity.RIGHT;
p.x = 0;
p.y = 100;
WindowManager windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
windowManager.addView(myView, p);
Damit dies funktioniert, müssen Sie die folgende Erlaubnis zu Ihrem AndroidManifest.xml hinzufügen
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>