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"/>