我有一个通过 Intent 调用此活动的小部件,它的 onCreate 方法具有以下代码:
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mTopView = (ViewGroup) inflater.inflate(R.layout.screen_filter, null);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT);
params.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
|WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(params);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
wm.addView(mTopView, params);
该代码创建了一个覆盖层,充当屏幕过滤器,停留在每个活动之上。
问题是我不知道以后如何删除它。
调用wm.removeView(mTopView);
会出错
java.lang.IllegalArgumentException:视图未附加到窗口管理器
据我了解,我失去了对我添加的视图的引用,因为我使用 Intent 从小部件调用它。它是一个状态机,一个状态添加了这个视图,后面的状态应该删除它。
我怎样才能删除它?也许某种方法允许我搜索所有添加的视图然后删除它们?
任何提示将不胜感激。