我正在使用DialogFragment
,并且在成功设置图像以在按下时关闭(即关闭)对话框时,当用户单击对话框外部的任何位置时,我很难找到关闭对话框的方法,就像普通对话框。我以为会有某种
dialogFragment.setCanceledOnTouchOutside(true);
电话,但我没有在文档中看到。
这有可能DialogFragment
吗?还是我看错地方了?我尝试在“父”活动中拦截触摸事件,但是除了没有得到任何触摸事件之外,这对我来说似乎不合适。
Answers:
@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;
}
setCanceledOnTouchOutside
在onCreateView
按@Apurv。我要指出,我叫setCanceledOnTouchOutside(false)
这里有很多答案,但是,对话框打开时应用程序崩溃。getDialog().setCanceledOnTouchOutside(true);
内部写入onCreateView
无效,导致我的应用程序崩溃。
(我正在AppCompatActivity
用作我的BaseActivity和android.app.DialogFragment
我的片段)。
起作用的是以下两行之一:
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
会使应用程序崩溃!如果发现错误,请更新答案。
onCreateDialog()
,这是初始化对话框的常用方法。在这种情况下onCreateView()
,什么也不做,甚至不包含视图。您可以尝试将代码移至onCreateDialog()
。
onCreateDialog
,我也遇到了问题onCreateView
。也许我错了,您应该保留onActivityCreated
,这是进行其他初始化的好方法(例如,参见stackoverflow.com/a/50734566/2914140)。
BottomSheet
实施。我同意BSheet的情况可能有所不同。但是,此解决方案DialogFragment
确实可以很好地工作。
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
它在模糊。我有同样的问题。这适用于Java,而适用于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;
}
}
onCreateView