14

EditTextと重複するPopupWindowを使用してメニューを操作します。

PopupWindowがEditTextIMEシステムのいくつかの項目(選択マーク、貼り付けボタン)と重なっていることを除いて、正常に機能します。

私の質問は、PopupWindowのz順序を強制して、それらの装飾の上に表示されるようにするにはどうすればよいですか?

これが何が起こっているかの画像です。PopupWindow(メニュー)をすべての上に描画する必要があるので、どういうわけかWindowManagerにウィンドウの順序を指示します。ありがとう。

ここに画像の説明を入力してください

4

4 に答える 4

9

自分で答えを見つけました。

これらの装飾は、EditText によって管理される通常の PopupWindow です。

ウィンドウの Z オーダーはWindowManager.LayoutParams.typeによって定義され、実際にはウィンドウの目的を定義します。有効な範囲は、ポップアップ ウィンドウの 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;
     }
  }
于 2012-06-15T23:03:24.440 に答える