Notre plateforme Android est composée d'activités les unes après les autres, et chaque activité est constituée d'une ou plusieurs vues.
Ainsi, lorsque nous voulons afficher une interface, la première chose à laquelle nous pensons est de créer une activité, puis toutes les opérations sont implémentées dans l'activité, ou dans un dialogue ou un Toast. Cette méthode est simple, mais dans certains cas, tout ce dont nous avons besoin est un simple affichage, et l'utilisation d'Activity est évidemment redondante. Comment devons-nous gérer cela ?
Une application Android est également un processus Linux au niveau de la couche inférieure, mais la notion de processus est affaiblie au niveau de la couche supérieure et fait abstraction de l'interaction de l'activité. Le code contrôle directement l'activité et l'interaction de l'utilisateur est également l'activité.
L'activité est un objet abstrait du point de vue de l'interaction de l'utilisateur et est isolée du processus dans sa conception et son utilisation. Le processus est similaire à une fonction d'adoption. Un processus peut avoir plusieurs activités. Il peut non seulement adopter l'activité de son application actuelle,
mais aussi les activités spécifiées par d'autres packages d'installation pour le processus, si l'activité est détruite. le processus ne sera pas détruit (sauf si le système l'exige ou si le code force la suppression du processus).
Il s'avère que l'ensemble du mécanisme de fenêtre Android est basé sur une interface appelée WindowManager. Cette interface peut ajouter des vues à l'écran, et
peut également supprimer des vues de l'écran. L'objet auquel il fait face est l'écran à une extrémité et la vue à l'autre extrémité. Il ignore directement notre activité précédente
ou notre dialogue, etc. En fait, l'implémentation sous-jacente de notre Activity ou Diolog se fait également via WindowManager. Ce
WindowManager est global, et l'ensemble du système est le seul. C'est la couche inférieure qui affiche la vue.
Écrivez un code simple :
Code Java
WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); Button view = new Button(this); view.setText("window manager test!"); WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(); mWm.addView(view, mParams);
Généralement, lorsque vous commencerez à développer Android, vous ferez une erreur, c'est-à-dire que vous obtiendrez getWidth() dans le constructeur de View et getHeight(),
Lorsqu'un objet de vue est créé, Android ne connaît pas sa taille, donc les résultats renvoyés par getWidth() et getHeight() sont 0,
La taille réelle est calculée lorsque la mise en page est calculé. Vous trouverez donc une chose intéressante, c'est-à-dire la raison pour laquelle la longueur et la largeur peuvent être obtenues dans onDraw().
Utilisez WindowManager pour implémenter une fenêtre flottante
WindowManager.LayoutParams params; params = new WindowManager.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE,//TYPE_APPLICATION, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.TOP; manager.addView(tmpView, params);
Ensuite, vous pouvez ajouter la vue qui doit être ajoutée à la fenêtre flottante à la fenêtre :
if(view.getParent==null)//如果view没有被加入到某个父组件中,则加入WindowManager中 wManager.addView(view,wmParams);
Parmi eux, view est le composant de vue qui doit être placé dans la fenêtre flottante.
Si vous souhaitez le supprimer du WindowManager, vous pouvez exécuter l'instruction suivante :
if(view.getParent()!=null) wManager.removeView(view);
Sous Android, vous pouvez ajouter plusieurs fenêtres selon la méthode ci-dessus. Problèmes causés par plusieurs. windows :
2. Problèmes liés au cycle de vie des applications
Lorsque d'autres applications apparaissent devant l'activité principale du navigateur, quel que soit le nombre de sous-fenêtres du navigateur qui apparaissent devant, le cycle de vie du navigateur entrera en pause. État.
Pour des explications plus détaillées sur les solutions multi-fenêtres pour les navigateurs Android, veuillez faire attention au site Web PHP chinois !