Может кто-то, пожалуйста, помогите мне получить комбинацию WindowManager.LayoutParams, которая может передавать события слоям под TYPE_SYSTEM_ALERT или аналогичным типом оверлея (который находится сверху каждого другого окна).
Проблема. Моя проблема заключается в том, что тип окна TYPE_SYSTEM_ALERT получает фокус, чтобы остановить передачу событий движения другим приложениям под ним.
Образец кода
WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSLUCENT);
Требование: мне нужно получить TYPE_SYSTEM_ALERT или аналогичный тип наложения, который остается поверх каждого другого окна, а также получает события движения, а также передает события движения на любой оверлей под верхним слоем (возможно, TYPE_SYSTEM_ALERT).
Мне нужно, чтобы он оставался поверх всех остальных окон, поскольку мне нужно рисовать изображения поверх всех окон, не прерывая события движения.
Ну, из документов это говорит:
TYPE_SYSTEM_ALERT – Тип окна: системное окно, например предупреждение о низкой мощности. Эти окна всегда находятся поверх окон приложений. В многопользовательских системах отображается только в окне пользовательского пользователя.
Ссылка здесь: https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT
Я тестировал это немного, и это означает, что представления отображаются почти во всем (включая диалоги с разрешениями с Android 6.0), в результате чего они теряют фокус. Уровень блокировки клавиатуры остается на вершине. Да, вы можете потерять focusable
атрибут в своих представлениях, но вы можете потенциально справиться со всем в сенсорном прослушивателе. Например, посмотрите этот пост: Как использовать View.OnTouchListener вместо onClick