Я использую DialogFragment
, и пока я успешно установить изображение, чтобы закрыть (т. е. закрыть) диалоговое окно при нажатии, я имею трудное время находя пути, чтобы закрыть диалоговое окно, когда пользователь щелкает в любом месте за его пределами, как это работает с нормальными диалогами. Я думал, что будет какой-то
dialogFragment.setCanceledOnTouchOutside(true);
позвонить, но я не'т вижу, что в документации.
Это возможно с DialogFragment на всех? Или я смотрю в неправильных местах? Я пробовал перехватывать события касания в 'родительская' деятельности, но только не получает события касания, это не'т кажется правильным для меня.
DialogFragment.getDialog().setCanceledOnTouchOutside(true);
Должен быть вызван в onCreateView (как Apurv Гупта указал).
/** 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;
}
Много ответов здесь, но, приложение аварии, когда откроется диалоговое окно. Писать getDialog().setCanceledOnTouchOutside(правда); "внутри" onCreateView не работало и разбился мое приложение.
(Я использую AppCompatActivity
как мой BaseActivity и андроид.приложение.DialogFragment как мой фрагмент).
Что работает, это один из двух следующих строк:
getDialog().setCanceledOnTouchOutside(истина);
Или
это.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.getDialog().setCanceledOnTouchOutside(false);
Это было опечаток. У меня была та же проблема. Это прекрасно работает для Java и Mono для Android моно будет:
this.getDialog().SetCanceledOnTouchOutside(false);
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;
}
}
Я бы рекомендовал использовать мое решение только после попытки решения. Я описал мое решение здесь. Просто кратко, я проверяю касания границы DialogFragment.getView адаптера(). Когда точки касания находятся вне DialogFragment, я закрыть диалоговое.