如何使BottomSheetDialogFragment非模态?

4
在onCreateView()中,我尝试设置一些属性,但是DialogFragment仍然会在点击外部时消失。
我希望该片段在用户与应用程序的其他部分进行交互时保持几乎不变。
这是一个扩展BottomSheetDialogFragment类的类。
  @Override
  public View onCreateView(
      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    ...

    // makes background non-interactive
    getDialog().getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

    // prevents dimming of background
    getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

    // no effect?
    getDialog().setCanceledOnTouchOutside(false);
    this.setCancelable(false);

    return view;
  }

为什么this.setCancelable(false);而不是getDialog().setCancelable(false);(或者反过来,所有对this对象的调用)? - Andrii Omelchenko
添加注释 - 上述代码位于扩展BottomSheetDialogFragment类中,该类是DialogFragment的子类。文档说明要在DialogFragment上调用它,而不是内部Dialog。https://developer.android.com/reference/android/support/v4/app/DialogFragment.html#setCancelable(boolean) - dmonopoly
实际上,据我所知,您应该从DialogFragment继承并覆盖public Dialog onCreateDialog(Bundle savedInstanceState) { ... 方法。 - Andrii Omelchenko
它也不起作用。 - dmonopoly
@dmonopoly,你找到了解决问题的方法吗? - rpattabi
显示剩余3条评论
1个回答

0

代码如下:

    public class MyDialogFragment extends DialogFragment {

        ...

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
            builder.setTitle(...)
                    .setMessage(...)
                    .setCancelable(false);

            ...

            Dialog dialog = builder.create();
            dialog.getWindow();
            return dialog;
        }

        ...

    }

对我来说可行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接