我在服务中创建了一个View,它始终位于android中的每个应用程序之上.
最初,服务的行为是TYPE_SYSTEM_ALERT.
WindowManager.LayoutParams layparams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
layparams .gravity = Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL;
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(serviceView, layparams );
Run Code Online (Sandbox Code Playgroud)
我在运行时更改服务的行为意味着在触摸时在TYPE_SYSTEM_ALERT和TYPE_SYSTEM_OVERLAY之间切换.当我在视图参数外部触摸时以及在视图参数内触摸时,会发生切换.
layparams .type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
Using updateViewLayout(serviceView, layparams )
Run Code Online (Sandbox Code Playgroud)
问题:当我在视图外触摸时,第一次触摸只是激活TYPE_SYSTEM_OVERLAY然后外部app工作正常.当TYPE_SYSTEM_OVERLAY工作时,在此之后触摸视图时,它将触发视图后面的对象操作而不是视图的操作.但是当你触摸视图时,将应用TYPE_SYSTEM_ALERT,现在View将正常运行.
当前实现:当在布局参数之间进行切换时,我必须触摸两次来处理特定的事情.