3

ボタンなしでアラートダイアログを開いて情報を表示するメインビュー(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);

間違いはどこですか?フラグを設定するとき、特定の順序に従う必要がありますか?

4

0 に答える 0