ボタンなしでアラートダイアログを開いて情報を表示するメインビュー(SurfaceView)があります。したがって、alertDialog はメイン ビューの上の小さなウィンドウです。
ユーザーが画面上の任意の場所に触れたときに、alertDialog を閉じたいと思います。
今までは、alertDialog の touchEvent で alertDialog を閉じることができました。
alterDialog または surfaceView に属性はありますか?
alertDialog が表示されていても、surfaceView で touchEvent リスナーをアクティブにすることはできますか?
アンドロイド 2.3.3
この質問に関する私のタスクに関する追加情報を見つけました: dialog reject。ここで、次の 2 つのフラグを設定します (私のダイアログはモーダルではありません): FLAG_NOT_TOUCH_MODAL、FLAG_WATCH_OUTSIDE_TOUCH
残念ながら、タッチイベントのオーバーライドでは、ダイアログの外側に触れたときにイベント MotionEvent.ACTION_OUTSIDE を受け取ることはありません。
私のアクティビティでは、これを行います:
alertBuilder.setView(mDialogLayout);
alertDialog = alertBuilder.create();
alertDialog.setOwnerActivity(this);
そして後で他のクラスで私はそれをします:
alertDialog.show();
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(alertDialog.getWindow().getAttributes());
lp.width = (int)(oJassSurfaceView.oCanvas.getWidth() *Constants.d_FactorResizeDialogWidth);
lp.height = (int)(oJassSurfaceView.oCanvas.getHeight() *Constants.d_FactorResizeDialogHeight);
lp.x=Constants.iX_PositionDialog;
lp.y=Constants.iY_PositionDialog;
alertDialog.getWindow().setAttributes(lp);
alertDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
alertDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
間違いはどこですか?フラグを設定するとき、特定の順序に従う必要がありますか?