允许外部触摸DialogFragment

Yan*_*niv 14 android android-dialogfragment

Fragment在我的应用程序中显示了一个DialogFragment.
我在片段中有一个关闭对话框的按钮.但是当我显示dialogFragment时,对话框外部的触摸什么都不做,我无法单击对话框片段外的按钮.

如何为DialogFragment提供外部触摸?

Yan*_*niv 19

为了做到这一点,Window应该打开允许外部触摸的标志,并且为了良好的外观,应该清除背景暗淡标志.
因为它必须在创建对话框后完成,所以我已经通过它实现了它Handler.

@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    // This is done in a post() since the dialog must be drawn before locating.
    getView().post(new Runnable() {

        @Override
        public void run() {

            Window dialogWindow = getDialog().getWindow();

            // Make the dialog possible to be outside touch
            dialogWindow.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
            dialogWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

            getView().invalidate();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

此时外部触摸是可能的.

如果我们想让它更好,没有框架,可以添加以下代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Hide title of the dialog
    setStyle(STYLE_NO_FRAME, 0);
}
Run Code Online (Sandbox Code Playgroud)

  • 您是否知道如何为BottomSheetDialogFragment实现相同功能? (3认同)

Aym*_*oub 7

这是更通用的标志,允许任何动作,而不仅仅是触摸动作

window.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
Run Code Online (Sandbox Code Playgroud)