我正在使用DialogFragment
,当我按下时成功设置图像关闭(即关闭)对话框时,我很难找到在用户点击任何地方时关闭对话框的方法在它之外,就像它适用于普通对话框一样。我以为会有某种
dialogFragment.setCanceledOnTouchOutside(true);
打电话,但我在文档中没有看到。
这可能与DialogFragment
完全相同吗?或者我在错误的地方寻找?我尝试拦截“父母”活动中的触摸事件,但除了没有接触任何触摸事件外,它对我来说似乎不对。
答案 0 :(得分:161)
DialogFragment.getDialog().setCanceledOnTouchOutside(true);
必须在onCreateView
中调用(正如Apurv Gupta指出的那样)。
答案 1 :(得分:55)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
getDialog().setCanceledOnTouchOutside(true);
...
}
答案 2 :(得分:19)
/** 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;
}
答案 3 :(得分:4)
这里有很多答案但是,对话框打开时应用程序崩溃了。
在getDialog().setCanceledOnTouchOutside(true);
内写onCreateView
无法正常工作并使我的应用崩溃。
(我使用AppCompatActivity
作为我的BaseActivity,使用android.app.DialogFragment
作为我的片段。)
以下两行中的任何一行都有效:
getDialog()setCanceledOnTouchOutside(真);
OR
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
中编写代码会导致应用程序崩溃!
如果您发现错误,请更新答案。
答案 4 :(得分:1)
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
这是错误的。我有同样的问题。这适用于Java和Mono for android Mono将是:
this.getDialog().SetCanceledOnTouchOutside(false);
答案 5 :(得分:1)
如果要在DialogFragment
之外单击时执行一些逻辑,只需重写onCancel方法。
override fun onCancel(dialog: DialogInterface) {
super.onCancel(dialog)
// Do your work here
}
答案 6 :(得分:0)
我建议在尝试上述解决方案后才使用我的解决方案。我已经描述了我的解决方案here。简而言之,我正在检查DialogFragment.getView()的触摸界限。当触摸点在DialogFragment之外时,我正在解雇Dialog。
答案 7 :(得分:0)
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;
}
}