我想显示一个PopupWindow在所有窗口之上(例如:另一个popupwindow、对话框或另一个活动屏幕),而不需要请求SYSTEM_ALERT_WINDOW权限,因此我使用WindowManager.LayoutParams.TYPE_TOAST。
public void showSimplePopupWindow() {
final View popupView = layoutInflater.inflate(R.layout.popup_layout_2, null);
final PopupWindow popupWindow = new PopupWindow(popupView);
...config popup window...
PopupWindowCompat.setWindowLayoutType(popupWindow, WindowManager.LayoutParams.TYPE_TOAST);
popupWindow.showAsDropDown(findViewById(R.id.button_show_popup_window));
}
如果我将targetSdkVersion < 26
,则在所有Android版本中都可以正常工作。
但是,如果我保留上述代码并将目标targetSdkVersion
更新为26,则会出现以下问题:在使用设备api 25-26 时会崩溃,出现异常情况:android.view.WindowManager $ BadTokenException:无法添加窗口--令牌android.view.ViewRootImpl $ W @ 859d91f无效;您的活动正在运行吗?
我看到sdk 26
已弃用TYPE_TOAST
并建议使用TYPE_APPLICATION_OVERLAY
。然而,当我使用TYPE_APPLICATION_OVERLAY
时,AndroidStudio
显示需要API 26
。因此,TYPE_APPLICATION_OVERLAY
只能与设备api 26配合良好,在设备api < 26上,它将崩溃(即使我已启用显示/绘制其他应用程序
权限)。
有没有其他方法可以使TYPE_TOAST
与目标api 26
一起使用?任何帮助或建议都将不胜感激。