私たちの Android プラットフォームは次々にアクティビティで構成されており、各アクティビティは 1 つ以上のビューで構成されています。
したがって、インターフェイスを表示したいとき、最初に考えるのはアクティビティを作成することです。その後、すべての操作はアクティビティ、またはダイアログまたはトーストに実装されます。確かにこの方法は簡単ですが、単純な表示だけで済む場合もあり、Activityを使うのは明らかに冗長です。この場合はどうすればよいでしょうか。
Android アプリケーションも最下層では Linux プロセスですが、上位層ではプロセスの概念が弱まり、Activity のようなインタラクションが抽象化されています。コードはアクティビティを直接制御し、ユーザーの操作もアクティビティです。
アクティビティは、ユーザーインタラクションの観点から抽象化されたオブジェクトであり、概念および使用においてプロセスから分離されています。このプロセスは、アダプション機能に似ています。プロセスは、現在のアプリケーションのアクティビティだけでなく、プロセスの他のインストール パッケージによって指定されたアクティビティも含めることができます。 (システムが必要とする場合を除き) またはコードがプロセスを強制的に強制終了する場合を除き、破棄されません)。
画面からビューを削除することもできます。それが直面するオブジェクトは、一方の端が画面、もう一方の端がビューであり、以前のアクティビティ
やダイアログなどを直接無視します。実際、Activity または Diolog の基礎となる実装も WindowManager を通じて行われます。この
WindowManager はグローバルであり、システム全体が唯一のものです。ビューを表示するのは最下層です。
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);
WindowManagerを使用してフローティングウィンドウを実装します
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);
if(view.getParent==null)//如果view没有被加入到某个父组件中,则加入WindowManager中 wManager.addView(view,wmParams);
if(view.getParent()!=null) wManager.removeView(view);
他のアプリケーションがブラウザのメイン アクティビティの前に表示される場合、ブラウザのサブウィンドウがどれだけ前にポップアップしても、ブラウザのライフ サイクルは onPause 状態になります。
Android ブラウザーのマルチウィンドウ ソリューションの詳細な説明については、PHP 中国語 Web サイトに注目してください。