Android開発芸術探索ノート(十三)のWindowとWindowManager

1978 ワード

一、紹介
Windowは抽象クラスであり、その具体的な実装はPhoneWindowクラスである.WindowManagerは、Windowへの外部アクセスのためのポータルであり、Windowの具体的な実装は、WindowManagerService(システムサービス)において、WindowManagerとWindowManagerServiceのインタラクションがIPCプロセスである.
Androidのすべてのビューは、Activity、Dialog、Toastなど、Windowによって表示されます.これらのビューは実際にはWindowに添付されているので、Windowは実際にはViewの直接管理者です.
二、簡単にWindowを追加する
show my code
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
mFloatingButton = new Button(this);

mFloatingButton.setText("click me");

mLayoutParams = new WindowManager.LayoutParams(
              WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, 1, 0,
              PixelFormat.TRANSPARENT);
              
mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL //  Window              Window,           
              | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE  //       ,         
              | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;  //         

      

mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;

mLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;
mLayoutParams.x = 100;
mLayoutParams.y = 300;
mFloatingButton.setOnTouchListener(this);
//   View
mWindowManager.addView(mFloatingButton, mLayoutParams);
WindowManager.LayoutParamsのFlagとTypeをご紹介します.
Flag制御Windowの表示特性
  • FLAG_NOT_TOUCH_MODALは、現在のWindow領域以外のクリックイベントを最下位のWindowに渡し、現在のWindow内のクリックイベントを自分で処理するシステムを示します.
  • FLAG_NOT_FOCUSABLEは、Windowがフォーカスを取得する必要がなく、入力イベントも受信しないことを示し、上のFlagが有効になり、最終イベントは下層のフォーカスを持つWindowに直接渡されます.
  • FLAG_SHOW_WHEN_LOCKこのモードをオンにすると、ウィンドウがロック画面に表示されます.

  • TypeパラメータはWindowのタイプを表します
  • アプリケーションWindowはActivity
  • に対応する
  • 子Windowは単独では存在せず、特定の親Windowに付属する必要がある.Dialog
  • のように
  • システムWindowは、Toastのようにシステムステータスバー
  • を作成するには、の権限を宣言する必要があります.