PopupWindow z订购

Poi*_*ull 13 android popupwindow android-windowmanager

我使用PopupWindow播放菜单,它与EditText重叠.

它工作正常,只是我的PopupWindow与EditText IME系统中的一些项目重叠(选择标记,粘贴按钮).

我的问题是:如何强制我的PopupWindow的z排序,使它出现在那些装饰上面?

这是正在发生的事情的形象.我需要在所有内容之上绘制我的PopupWindow(菜单),从而以某种方式告诉WindowManager如何订购窗口.谢谢.

在此输入图像描述

Poi*_*ull 8

我自己找到了.

这些装饰是普通的PopupWindow-s,由EditText管理.

任何Window的Z排序由WindowManager.LayoutParams.type定义,实际上它定义了Window的用途.弹出窗口的有效范围是FIRST_SUB_WINDOW - LAST_SUB_WINDOW.

应用程序通常不能更改PopupWindow的 "类型" ,除了使用Java反射调用隐藏函数PopupWindow.setWindowLayoutType(int),以及设置所需的窗口类型.

结果:

在此输入图像描述

编辑:执行此操作的 代码:

  Method[] methods = PopupWindow.class.getMethods();
  for(Method m: methods){
     if(m.getName().equals("setWindowLayoutType")) {
        try{
           m.invoke(getPopupWindow(), WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL);
        }catch(Exception e){
           e.printStackTrace();
        }
        break;
     }
  }
Run Code Online (Sandbox Code Playgroud)