2012-03-11 5 views
11

В Honeycomb мне удалось создать оверлей системы с TYPE_SYSTEM_OVERLAY и получить штрихи с FLAG_WATCH_OUTSIDE_TOUCH.TYPE_SYSTEM_OVERLAY в ICS

Теперь ICS что-то изменила. Я все еще могу создать оверлей системы, но я не могу получить прикосновения.

Теперь я могу создать то же самое с TYPE_SYSTEM_ALERT и получить прикосновения, но он просто ловит прикосновения, а не пропускает их, как в Honeycomb.

Любые идеи?

С уважением

ответ

7

Все, что вы описали, верно. Предполагается, что это ужесточает безопасность, поскольку прежнее поведение было источником нападений с использованием перехвата. Недавно я написал a blog post об этом изменении.

Есть идеи?

Не используйте ни один из них.

+0

Я только что нашел приложение, которое все еще делает это в ICS, Swipepad. Он позволяет перетаскивать каждое приложение с заранее определенной точки на середину экрана, а затем запускать наложение, поэтому должен быть способ –

+0

@EdwinSchriek: Это поведение звучит в соответствии с 'TYPE_SYSTEM_ALERT' - кажется разумным что непрерывные события касания, запущенные при нажатии на системное оповещение, будут доставлены на это системное предупреждение, а не на основное приложение. – CommonsWare

+0

Хмм, я думаю, это невозможно, но я продолжу искать. Благодаря! –

23

Чтобы создать вид наложения, при настройке LayoutParams НЕ установить тип в TYPE_SYSTEM_OVERLAY.

Вместо этого установите его на TYPE_PHONE.

Используйте следующие флаги:

FLAG_NOT_TOUCH_MODAL

FLAG_WATCH_OUTSIDE_TOUCH

< < FLAG_NOT_TOUCH_MODAL Я нашел это один весьма важный. Без него основное внимание уделяется оверлейному и программному клавишам (домашний, меню и т. Д.), Пресеты не передаются в действие ниже.

+4

FYI jawsware имеет полное примерное приложение здесь, которое работает для ICS: http://www.jawsware.mobi/code_OverlayView/ –

+3

Невозможно поймать события щелчка на любом из вейлов в нем на 4.2.X, хотя работает хорошо на более низких версии Android. Какие-либо предложения? –

+0

Спасибо. Это сработало для меня - у меня было «TYPE_SYSTEM_OVERLAY», и я сменил его на «TYPE_PHONE» на «FLAG_NOT_TOUCH_MODAL» и установил прослушиватель с помощью «setOnTouchListener» вместо «setOnClickListener», чтобы получать штрихи в окнах PopUp выше моей активности, а также в действии ниже. В моем случае это уведомление о входящем вызове системы по умолчанию с оверлейным окном. –

Смежные вопросы