我正在使用DialogFragment
, 并且虽然我已成功设置图像以在按下时关闭(即关闭)对话框,但我很难找到当用户单击对话框之外的任何位置时关闭对话框的方法,就像它与正常的对话。我以为会有某种
dialogFragment.setCanceledOnTouchOutside(true);
打电话,但我在文档中没有看到。
这可能DialogFragment
吗?还是我找错地方了?我尝试在“父”活动中拦截触摸事件,但除了没有得到任何触摸事件之外,这对我来说似乎不合适。
DialogFragment.getDialog().setCanceledOnTouchOutside(true);
必须被召唤onCreateView
(正如 Apurv Gupta 指出的那样)。
@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;
}
这里有很多答案,但是当对话框打开时应用程序崩溃。getDialog().setCanceledOnTouchOutside(true);
在里面写东西onCreateView
没有用,我的应用程序崩溃了。
(我AppCompatActivity
用作我的 BaseActivity 和android.app.DialogFragment
我的 Fragment)。
有效的是以下两行之一:
getDialog().setCanceledOnTouchOutside(true);
或者
this.getDialog().setCanceledOnTouchOutside(true);
里面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(false);
引发以下错误
onCreateView
并在应用程序崩溃中编写代码!如果您发现有问题,请更新答案。
如果你想在点击外部时执行一些逻辑DialogFragment
,只需覆盖 onCancel 方法。
override fun onCancel(dialog: DialogInterface) {
super.onCancel(dialog)
// Do your work here
}
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
是打错了。我有同样的问题。这适用于 Java 和 Mono for android Mono 将是:
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 之外时,我将关闭 Dialog。