/**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;
}
@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
}
8条答案
按热度按时间ccgok5k51#
必须在
onCreateView
中调用(正如Apuv Gupta指出的那样)。zzlelutf2#
9ceoxa923#
ibps3vxo4#
这里有很多答案,但当对话框打开时,应用程序会崩溃。在
onCreateView
中写入getDialog().setCanceledOnTouchOutside(true);
不起作用,导致我的应用程序崩溃。(我使用
AppCompatActivity
作为我的基本活动,使用android.app.DialogFragment
作为我的片段)。起作用的是以下两行中的一行:
GetDialog().setCanceledOnTouchOutside(True);
或
This.getDialog().setCanceledOnTouchOutside(true);
onActivityCreated
内部点赞不能使用的内容:
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
抛出以下错误
而在
onCreateView
中编写代码会导致应用程序崩溃!如果您发现错误,请更新答案。ep6jt1vc5#
如果要在
DialogFragment
外部单击时执行某些逻辑,只需重写onCancel方法。7uhlpewt6#
这对Java来说很好用:
idv4meu87#
对我很管用
我的代码
km0tfn4u8#
我建议只有在尝试了上述解决方案后才使用我的解决方案。我已经描述了我的解决方案here。为了简单起见,我正在检查DialogFragment.getView()的接触边界。当接触点在DialogFragment之外时,我将关闭该对话框。