L'Android WindowManager est un service système, qui est responsable de la gestion de la liste des fenêtres commandée par Z, quelles fenêtres sont visibles et comment elles sont disposées à l'écran. Entre autres choses, il effectue automatiquement des transitions et des animations de fenêtres lors de l'ouverture ou de la fermeture d'une application ou de la rotation de l'écran.
Chaque activité a une fenêtre utilisée pour afficher son contenu à l'écran. Lorsque vous appelez setContentView sur une activité, il attache cette vue à la fenêtre par défaut de l'activité. La fenêtre par défaut remplit l'écran, de sorte que la fenêtre de votre activité masque toutes les autres activités - le WindowManager affichera la fenêtre en haut. Donc, normalement, vous n'avez pas à vous soucier de Windows - vous créez simplement une activité et Android fera le reste pour vous.
Mais vous devez interagir avec le WindowManager si vous voulez faire quelque chose d'inhabituel comme créer des fenêtres flottantes qui ne remplissent pas l'écran. Si vous souhaitez créer une fenêtre flottante qui est visible devant d'autres applications, vous ne pouvez pas utiliser une activité car votre activité s'arrêtera lorsqu'une autre application arrivera au premier plan, et sa fenêtre sera cachée ou détruite. Au lieu de cela, vous devez afficher une fenêtre à partir d'un service d'arrière-plan. Par exemple:
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);
Pour que cela fonctionne, vous devrez ajouter l'autorisation suivante à votre AndroidManifest.xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>