在目标android 26的所有窗口上方显示PopupWindow

Pha*_*inh 6 android popupwindow android-8.0-oreo

我想在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));
}
Run Code Online (Sandbox Code Playgroud)

如果我设置它在所有Android版本中运行良好targetSdkVersion < 26 .

目前,如果我保留上面的代码并将目标更新targetSdkVersion为26,那么它会因设备api 25-26而异常崩溃android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@859d91f is not valid; is your activity running?

我看到它TYPE_TOAST已被弃用sdk 26,他们建议使用TYPE_APPLICATION_OVERLAY.但是,当我使用时TYPE_APPLICATION_OVERLAY,AndroidStudio显示TYPE_APPLICATION_OVERLAY所需的api 26.因此,TYPE_APPLICATION_OVERLAY只有设备api 26才能正常工作,对于设备api <26,它会崩溃(即使我已启用Display/Draw over other app权限) 在此输入图像描述

有没有其他方法可以TYPE_TOAST与目标一起工作api 26?任何帮助或建议将非常感谢.

Von*_*onC 0

自从:

一种选择是在运行时检查系统版本,并根据其值使用正确的常量。