私たちの 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);一般的に、Android の開発を初めて始めるとき、間違いを犯します。それは、View のコンストラクターで getWidth() と getHeight() を取得することです。 created の場合、Android はそのサイズを知らないため、 getWidth() と getHeight() によって返される結果は 0 です。 実際のサイズはレイアウトの計算時に計算されるため、興味深いことがわかります。つまり、それを取得できます。 onDraw() 長さと幅の理由。
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);フローティングウィンドウに追加する必要があるViewをウィンドウに追加できます:
if(view.getParent==null)//如果view没有被加入到某个父组件中,则加入WindowManager中 wManager.addView(view,wmParams);このうち、viewは配置する必要があるビューコンポーネントですフローティングウィンドウ。 WindowManager から削除したい場合は、次のステートメントを実行できます:
if(view.getParent()!=null) wManager.removeView(view);Android では、上記の方法に従って複数のウィンドウを追加できます。 複数のウィンドウによって引き起こされる問題: 2.問題点
他のアプリケーションがブラウザのメイン アクティビティの前に表示される場合、ブラウザのサブウィンドウがどれだけ前にポップアップしても、ブラウザのライフ サイクルは onPause 状態になります。
Android ブラウザーのマルチウィンドウ ソリューションの詳細な説明については、PHP 中国語 Web サイトに注目してください。