Androidはデスクトップに表示されるwindowをポップアップします

4783 ワード

最近、もし私がActivity AのHandlerの中でメッセージ処理イベントを書いて、Activity AからインタフェースBにジャンプした後、Aのhandlerはまだメッセージを処理し続けていることを発見しました.私のプロジェクトでは、ユーザーは部屋のインタフェースに入って、メッセージを受信し始めました.それから、彼もインタフェースを設定していくつかの部屋の設定を行うことができます.もしこの時、ユーザーがTを強制されたら、どのインタフェースにいても、ユーザーが蹴り出されたことを表示するダイアログボックスをポップアップする必要があります.以前は普通のDialogを使っていましたが、部屋のインタフェースが表示されたときだけ蹴り出されたダイアログボックスが表示され、設定インタフェースではこれが見えず、バグがテストされました.ずっとwindowでできることを知っていましたが、試してみると主な問題は、1つはwindowのView上のbuttonクリックイベントに応答することで、1つは応答システムのbackロールバックイベントで、この2つは1つも応答しないか、1つしか応答できないか、ネット上で長い間探しても良い方法が見つからなかったことです.最後にbackキーが応答できるようにブール変数を1つしか追加できません.
    private WindowManager mWindowManager = null;

    private boolean isShow;

    private View view;

        

    

    public void showMsgWindow(String tipMessage, Context context) {





        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);



        WindowManager.LayoutParams params = createParams();



        view = View.inflate(context, R.layout.window, null);



        TextView message = (TextView) view.findViewById(R.id.window_message);

        Button cancel = (Button) view.findViewById(R.id.window_cancel);

        Button ok = (Button) view.findViewById(R.id.window_ok);

        message.setText(tipMessage);



        cancel.setOnClickListener(new OnClickListener() {



            @Override

            public void onClick(View v) {

                removeWindowManager();

            }

        });



        ok.setOnClickListener(new OnClickListener() {



            @Override

            public void onClick(View v) {

                removeWindowManager();

            }

        });

        mWindowManager.addView(view, params);

        isShow = true;

    }



    public void removeWindowManager() {

        mWindowManager.removeView(view);

        isShow = false;

    }



    public WindowManager.LayoutParams createParams() {

        WindowManager.LayoutParams params = new WindowManager.LayoutParams();



        //   

        params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

        params.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

        params.format = PixelFormat.TRANSLUCENT;

        params.width = LayoutParams.MATCH_PARENT;

        params.height = LayoutParams.MATCH_PARENT;



        params.gravity = Gravity.CENTER;

        return params;

    }

 
  //Activity @Override
public void onBackPressed() { if (isShow) { removeWindowManager(); } else { super.onBackPressed(); } }

醜くて、無理に問題を解決しました.