Ответ 1
DialogFragment.getDialog().setCanceledOnTouchOutside(true);
Должно быть вызвано в onCreateView
(как указал Апурв Гупта).
Я использую DialogFragment
, и пока я успешно установил изображение, чтобы закрыть (т.е. уволить) диалог при нажатии, мне трудно найти способ отклонить диалог, когда пользователь нажимает на него вне его, так же, как это работает с обычными диалогами. Я думал, что будет какой-то
dialogFragment.setCanceledOnTouchOutside(true);
но я не вижу этого в документации.
Возможно ли это при DialogFragment
вообще? Или я ищу не в том месте? Я попытался перехватить события касания в "родительской" деятельности, но, кроме того, что не получил никакого события касания, мне это не показалось правильным.
DialogFragment.getDialog().setCanceledOnTouchOutside(true);
Должно быть вызвано в onCreateView
(как указал Апурв Гупта).
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
getDialog().setCanceledOnTouchOutside(true);
...
}
/** 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;
}
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
Было ошибкой. У меня такая же проблема. Это отлично подходит для Java и Mono для Android Mono:
this.getDialog().SetCanceledOnTouchOutside(false);
Здесь много ответов, но при открытии диалогового окна приложение падает.
Запись 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
приводит к сбою приложения!
Обновите ответ, если найдете что-то не так.
Я бы рекомендовал использовать мое решение только после опробования вышеописанных решений. Я описал свое решение здесь. Просто для краткости, я проверяю сенсорные грани DialogFragment.getView(). Когда точки касания находятся за пределами диалогового окна, я отклоняю диалоговое окно.
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;
}
}