android - 为什么只在 Nougat 的 Activity 转换中删除添加到 WindowManager 的 View ?

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

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

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) 之前的所有操作系统上,此 View 在切换 Activity 时坚持 WindowManager,我仍然可以在下一个打开的 Activity 中使用它。

出于某种原因,在 Nougat 上, View 从屏幕上删除了。

问题:有谁知道为什么会发生这种情况以及如何恢复我在以前系统上的先前行为?它与 Nougat 中添加的新自由窗体模式有关吗,在此处描述:

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

最佳答案

我想问题出在 TYPE_TOAST 标志上。我在 Nougat 上看到这个 View 消失的错误。

你可以尝试使用 TYPE_SYSTEM_ALERT 标志

关于android - 为什么只在 Nougat 的 Activity 转换中删除添加到 WindowManager 的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44181108/

相关文章:

java - 有没有办法观察 Arraylist 的大小,因为它通过数据绑定(bind)发生变化?

sql-server - 使用奇怪的查询优化器行为连接 SQL Server 中的 View

android - 后退按钮被运行在所有其他应用程序之上的应用程序阻止

android - 第一次调用 getDecorView 会锁定 View 。如何知道 View 是否被锁定?

android - 以编程方式更改 View 的右边距?

android - 如何在android中使用库项目中的布局文件

android - 通过 View 和 Layout 调用另一个 XML

android - 全屏 TYPE_SYSTEM_ALERT [无状态和导航栏]

android - Kotlin : How to insert a value of a variable in a name of another variable

java - Android,在tomcat服务器上传一个文件