Android Windowmanager는 시스템 서비스로 Z에 의한 Windows 목록을 관리하는 Windows가 보이고 화면에 배치되는 방법. 무엇보다도 앱을 열거 나 닫거나 화면을 회전 할 때 자동으로 창 전환 및 애니메이션을 수행합니다.
모든 활동에는 화면에 내용을 표시하는 데 사용되는 창이 있습니다. 활동에서 setContentView를 호출하면 해당보기가 활동의 기본 창에 첨부됩니다. 기본 창이 화면을 채우므로 활동의 창이 다른 활동을 숨 깁니다. WindowManager는 위에있는 창이 표시됩니다. 따라서 일반적으로 Windows에 대해 걱정할 필요가 없습니다. 단지 활동을 만들고 Android는 나머지 부분을 수행합니다.
그러나 화면을 채우지 않는 플로팅 창을 만드는 것과 같은 특이한 일을하려면 WindowManager와 상호 작용해야합니다. 다른 응용 프로그램 앞에서 보이는 부유 식 창을 만들려면 다른 앱이 전경에 올 때 활동이 중지되고 창이 숨겨 지거나 파괴되기 때문에 활동을 사용할 수 없습니다. 대신 배경 서비스에서 창을 표시해야합니다. 예를 들어:
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);
이 작업을 위해서는 AndroidManifest.xml에 다음 권한을 추가해야합니다.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>