我想告诉PopupWindow
所有窗口之上(例如:其他popupwindow,对话,另一个活动屏幕)上面没有要求SYSTEM_ALERT_WINDOW
所以我用WindowManager.LayoutParams.TYPE_TOAST
显示PopupWindow所有窗口为目标的android 26
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
。
目前,如果我继续上面的代码和更新目标targetSdkVersion
到26,然后它将与设备API崩溃25-26有例外android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] 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
一起工作?任何帮助或建议将不胜感激。
我知道这不是一个标准的方式,但使用透明的活动来显示popupWindow可能会帮助你在这种情况下 – misagh