【问题标题】:Show PopupWindow above all window for target android 26在目标 android 26 的所有窗口上方显示 PopupWindow
【发布时间】: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_TOASTsdk 26 中已弃用,他们建议使用TYPE_APPLICATION_OVERLAY。但是,当我使用TYPE_APPLICATION_OVERLAYAndroidStudio 显示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


【解决方案1】:

API 25 似乎存在一个错误。该错误是如果您将目标 API 更改为 26,API 25 设备将不再能够使用 TYPE_TOAST 参数,即使它在 API 25 中是允许的。

解决此问题的唯一方法是让用户在“设置”中为您的应用启用覆盖权限。 API 25 和 26 覆盖将按预期运行。

【讨论】:

    【解决方案2】:

    自:

    一种选择是check the System Version at Runtime,并根据其值使用正确的常量。

    【讨论】:

    • 感谢您的回答,但是当我将 TYPE_TOAST 与目标版本 26 一起使用时,具有 api 25 的设备会崩溃
    • @PhanVanLinh 为什么在运行时检测到目标版本为 26 时不使用 TYPE_APPLICATION_OVERLAY?
    • 对不起,我不太理解您的评论。如果我设置target version is 26TYPE_APPLICATION_OVERLAY 仅适用于设备 api 26,对于设备 api
    • @PhanVanLinh 我的答案的重点是确定要在运行时传递的参数值,这意味着根据运行时检测到的 API 级别将正确的值编码为一个或另一个。
    • @PhanVanLinh 含义:您的代码传递给 setWindowLayoutType 一个 int。该 int 将在运行时计算为 0x000007f6 或 0x000007d5,具体取决于运行时检测到的 API 值。
    猜你喜欢
    • 2015-01-22
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多