【发布时间】:2017-10-20 07:50:11
【问题描述】:
我想在没有请求SYSTEM_ALERT_WINDOW 的情况下首先显示PopupWindow 窗口(例如:另一个弹出窗口、对话框、另一个活动屏幕)所以我使用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,那么它将与 device 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 Display/Draw over other app允许)
有没有其他方法可以使TYPE_TOAST 与目标api 26 一起工作?任何帮助或建议将不胜感激。
【问题讨论】:
-
我知道这不是标准方式,但在这种情况下使用透明活动来显示 popupWindow 可能会对您有所帮助
标签: android popupwindow android-8.0-oreo