2015-01-24 2 views
1

Я пытаюсь показать всплывающее окно всякий раз, когда пользователь получает вызов, очень похоже на приложение truecaller. Всплывающее окно будет показывать различную информацию о другой стороне.Dispatch touch вне диалога/предупреждения

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

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

Итак, мой вопрос: есть ли способ показать всплывающее окно в верхней части экрана, в то время как остальная половина по-прежнему передает события касания к остальной части пользовательского интерфейса системы, точно так же, как делает всплывающее окно truecaller (или как тост сообщения)?

Вот две системы оповещения код, который я попробовал -

LayoutParams params = new LayoutParams(
       LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ALERT, 
       LayoutParams.FLAG_SHOW_WHEN_LOCKED, 
       PixelFormat.OPAQUE); 
params.gravity = Gravity.TOP; 
windowManager.addView(preRootView, params); 

и

LayoutParams params = new LayoutParams(
       LayoutParams.MATCH_PARENT, 
       LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ALERT | 
       LayoutParams.TYPE_SYSTEM_OVERLAY, 
       LayoutParams.FLAG_NOT_TOUCH_MODAL | 
         LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSPARENT); 
params.gravity = Gravity.TOP; 
windowManager.addView(preRootView, params); 

ответ

0

Я до сих пор не нашли ответа пока нет, но похоже, что есть библиотеки, которые позволяет создавать плавающие окна без перехватывая все сенсорные события на прозрачных участках.

Я стараюсь Standout library, и он отлично работает. Я также ищу попытку библиотеки Tooleap.

Я еще не читал исходный код Standout, поэтому не могу сказать, как они это сделали.