it-roy-ru.com

Как запустить событие, когда щелчок происходит вне диалогового окна?

Я хотел бы знать, как решить проблему, которая у меня есть.

У меня есть диалог, который всплывает в деятельности. Диалог не покрывает весь экран, поэтому кнопки из упражнения все еще отображаются. Я могу легко закрыть диалог, когда есть прикосновение за пределами диалога с dialog.setCanceledOnTouchOutside(true);

Однако я хочу запустить событие, если щелчок находится за пределами диалогового окна (например, если кто-то касается кнопки в основном действии, он должен закрыть диалоговое окно и запустить это событие одновременно).

31
fizo07

Меня устраивает,

        Window window = dialog.getWindow();
        window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

        dialog.show();

Смотрите этоhttp://developer.Android.com/reference/Android/view/WindowManager.LayoutParams.html#FLAG_NOT_TOUCH_MODAL

34
Samir Mangroliya

Когда dialog.setCanceledOnTouchOutside(true);, тогда вы просто переопределяете onCancel() следующим образом:

dialog.setOnCancelListener(
        new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                //When you touch outside of dialog bounds, 
                //the dialog gets canceled and this method executes.
            }
        }
);

Введите свой код внутри метода onCancel(), чтобы он запускался при отмене диалога.

49
Will Neithan

Вы можете использовать следующее решение для запуска события, когда щелчок происходит вне диалогового окна:

dialog.setOnCancelListener(
new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        yourFunction();
    }
}
);
0
Mehmed Çavaş