Подтвердить что ты не робот

Как отклонить DialogFragment при нажатии вне диалогового окна?

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

dialogFragment.setCanceledOnTouchOutside(true);

но я не вижу этого в документации.

Возможно ли это при DialogFragment вообще? Или я ищу не в том месте? Я попытался перехватить события касания в "родительской" деятельности, но, кроме того, что не получил никакого события касания, мне это не показалось правильным.

4b9b3361

Ответ 1

DialogFragment.getDialog().setCanceledOnTouchOutside(true);

Должно быть вызвано в onCreateView (как указал Апурв Гупта).

Ответ 2

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       ...
       getDialog().setCanceledOnTouchOutside(true);
       ... 
       }

Ответ 3

    /** The system calls this only when creating the layout in a dialog. */
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // The only reason you might override this method when using onCreateView() is
        // to modify any dialog characteristics. For example, the dialog includes a
        // title by default, but your custom layout might not need it. So here you can
        // remove the dialog title, but you must call the superclass to get the Dialog.
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCanceledOnTouchOutside(true);

        return dialog;
    }

Ответ 4

DialogFragment.getDialog().setCanceledOnTouchOutside(false);

Было ошибкой. У меня такая же проблема. Это отлично подходит для Java и Mono для Android Mono:

this.getDialog().SetCanceledOnTouchOutside(false);

Ответ 5

Здесь много ответов, но при открытии диалогового окна приложение падает. Запись getDialog().setCanceledOnTouchOutside(true); внутри onCreateView не работала и разбила мое приложение.

(Я использую AppCompatActivity как мой BaseActivity и android.app.DialogFragment как мой фрагмент).

Что работает, либо одна из двух следующих строк:

getDialog() setCanceledOnTouchOutside (истина);.

ИЛИ

this.getDialog() setCanceledOnTouchOutside (истина);.

внутри onActivityCreated как

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimationZoom;
        //getDialog().getWindow().setDimAmount(0.85f);
        getDialog().setCanceledOnTouchOutside(true);//See here is the code
    }

Что не использовать:

DialogFragment.getDialog() setCanceledOnTouchOutside (ложь);.

вызывает следующую ошибку

введите описание изображения здесь

И запись кода в onCreateView приводит к сбою приложения! Обновите ответ, если найдете что-то не так.

Ответ 6

Я бы рекомендовал использовать мое решение только после опробования вышеописанных решений. Я описал свое решение здесь. Просто для краткости, я проверяю сенсорные грани DialogFragment.getView(). Когда точки касания находятся за пределами диалогового окна, я отклоняю диалоговое окно.

Ответ 7

            Dialog.SetCanceledOnTouchOutside(true);

Работал для меня
Мой код

class dlgRegister : DialogFragment
        {
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
    ....
    ....
    }
    public override void OnActivityCreated(Bundle savedInstanceState)
            {
                Dialog.Window.RequestFeature(WindowFeatures.NoTitle);
                Dialog.SetCanceledOnTouchOutside(true);
                base.OnActivityCreated(savedInstanceState);
                Dialog.Window.Attributes.WindowAnimations =    Resource.Style.dialog_animation;
            }
    }