为什么仅在Nougat中为活动转换添加了WindowManager的视图?

时间:2017-05-25 12:53:28

标签: android view android-windowmanager android-7.1-nougat

我正在编写一个应用程序,其中我使用以下代码向WindowManager添加了一个视图:

private final FloatingBubbleView mBtn;
FloatingBubbleView iv = new FloatingBubbleView(context);
this.mBtn = iv;
this.mWm = (WindowManager) mAppContext.get().getSystemService(Context.WINDOW_SERVICE);
mWm.addView(mBtn, mLp);

布局参数配置:

final WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.width = iv.getLayoutParams().width;
lp.height = iv.getLayoutParams().height;
lp.type = WindowManager.LayoutParams.TYPE_TOAST;
lp.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
lp.format = PixelFormat.TRANSLUCENT;
lp.gravity = Gravity.TOP | Gravity.LEFT;
lp.x = 0;
lp.y = 100;

Android 7.0(Nougat)之前的所有操作系统上,此视图在切换活动时都会WindowManager,我仍然可以在下次打开的活动中使用它。

出于某种原因,在Nougat上从屏幕上移除了视图。

问题:有谁知道为什么会发生这种情况,如何恢复之前系统上的先前行为?它是否与 Nougat 中添加的新自由形式窗口模式有关,如下所述:

Android Nougat’s freeform window mode: what it is and how developers can utilize it

1 个答案:

答案 0 :(得分:1)

我想TYPE_TOAST标志中存在问题。我看到这个虫子的视图在Nougat上消失了。

您可以尝试使用TYPE_SYSTEM_ALERT标志