在对话框外按下时如何解除对话框片段?

n9vozmp4  于 2022-10-09  发布在  Android
关注(0)|答案(8)|浏览(228)

我使用的是DialogFragment,虽然我已经成功地将图像设置为在按下时关闭(即关闭)对话框,但我很难找到在用户单击对话框之外的任何地方时关闭对话框的方法,就像它对正常对话框起作用一样。我以为会有某种

dialogFragment.setCanceledOnTouchOutside(true);

但我在文档中没有看到这一点。

使用DialogFragment可以做到这一点吗?还是我看错地方了?我试着在“家长”活动中拦截触摸事件,但除了没有收到任何触摸事件外,对我来说似乎不太对。

ccgok5k5

ccgok5k51#

DialogFragment.getDialog().setCanceledOnTouchOutside(true);

必须在onCreateView中调用(正如Apuv Gupta指出的那样)。

zzlelutf

zzlelutf2#

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       ...
       getDialog().setCanceledOnTouchOutside(true);
       ... 
       }
9ceoxa92

9ceoxa923#

/**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;
    }
ibps3vxo

ibps3vxo4#

这里有很多答案,但当对话框打开时,应用程序会崩溃。在onCreateView中写入getDialog().setCanceledOnTouchOutside(true);不起作用,导致我的应用程序崩溃。

(我使用AppCompatActivity作为我的基本活动,使用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中编写代码会导致应用程序崩溃!如果您发现错误,请更新答案。

ep6jt1vc

ep6jt1vc5#

如果要在DialogFragment外部单击时执行某些逻辑,只需重写onCancel方法。

override fun onCancel(dialog: DialogInterface) {
    super.onCancel(dialog)
    // Do your work here
}
7uhlpewt

7uhlpewt6#

这对Java来说很好用:

DialogFragment.getDialog().setCanceledOnTouchOutside(false);
idv4meu8

idv4meu87#

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;
            }
    }
km0tfn4u

km0tfn4u8#

我建议只有在尝试了上述解决方案后才使用我的解决方案。我已经描述了我的解决方案here。为了简单起见,我正在检查DialogFragment.getView()的接触边界。当接触点在DialogFragment之外时,我将关闭该对话框。

相关问题