Как запустить событие, когда щелчок происходит вне диалогового окна? - PullRequest
34 голосов
/ 01 марта 2012

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

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

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

Ответы [ 4 ]

54 голосов
/ 25 февраля 2015

Когда 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(), чтобы он запускался при отмене диалога.

37 голосов
/ 01 марта 2012

Это работает для меня ,,

        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

0 голосов
/ 06 мая 2019

Если вы находитесь в пользовательском диалоговом классе и хотите перехватить событие «click outside» - переопределите cancel () Если вы хотите перехватить событие «диалог закрыт» - переопределите dismiss (). Я рекомендую вставлять логику ДО super.dismiss (). Пример Kotlin:

override fun dismiss() {
    Utils.hideKeyboard(mContext, window)
    super.dismiss()
}
0 голосов
/ 07 сентября 2018

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

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        yourFunction();
    }
});
...