Делегировать событие из моей деятельности на экран - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть тематическое действие, похожее на диалог, и оно настроено так, что оно заканчивается, когда пользователь щелкает снаружи. this.setFinishOnTouchOutside(true);

Как и ожидалось, когда пользователь нажимает снаружи, он заканчивается. Активность помечена как плавающая активность и отображается только сверху телефона.

Теперь, если пользователь нажимает на любую другую часть экрана, например, кнопку телефона / кнопку контакта на главном экране, действие завершается, но пользователь должен снова щелкнуть значок приложения телефона / контакта, чтобы открыть телефон / связь. приложение.

Я хочу, чтобы, если пользователь щелкнул вне моей активности, то действие было выполнено так, как если бы действия вообще не было на экране. Что-то вроде уведомления, которое не мешает пользователю выполнять другие задачи.

1 Ответ

0 голосов
/ 10 сентября 2018

Единственный способ, которым вы могли бы сделать это, это использовать скрытый флаг WindowManager.LayoutParams, FLAG_SLIPPERY .

Это позволяет касаниям, начинающимся с вашего вида, переходить к тому виду, который находится ниже, когда касание покидает ваш вид, но остается на экране. Однако я не думаю, что это сработает.

Android не позволяет вам касаться «через» сенсорного окна, поскольку предполагает, что Window должен получать TouchEvent. Android также не позволяет программно «касаться» экрана (без рут-доступа или доступа к системе), скорее всего по соображениям безопасности.


Некоторое время я копался в AOSP и нашел это .

Читая комментарии, можно сделать вывод, что, хотя то, что вы видите , не занимает весь экран, это делает Окно Действия. Таким образом, хотя в вашей Деятельности ничего не нажимается, Окно все еще перекрывает все, только с прозрачным фоном, и имеет дело с касаниями, которые не передаются в пользовательский интерфейс вашей Деятельности. Это возвращает нас к проблеме «касания».

...