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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么仅在Nougat中为活动转换添加了WindowManager的视图?相关的知识,希望对你有一定的参考价值。

我正在编写一个应用程序,我在其中使用以下代码向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

答案

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

您可以尝试使用TYPE_SYSTEM_ALERT标志

以上是关于为什么仅在Nougat中为活动转换添加了WindowManager的视图?的主要内容,如果未能解决你的问题,请参考以下文章

仅在 Laravel 5 中为一个环境启用全局中间件

仅在网格(WPF)中为一行添加IsEnabled

Android nougat 状态栏在启动活动时显示白色

如何仅在角度中为礼品卡模块添加提供者、服务和拦截器?

仅在课程“活动”时添加

为啥 iframe 仅在 iOS 中为空白?