具有清晰背景的DialogFragment(不变暗)

sam*_*mis 21 android background android-dialogfragment

我试图让a的背景DialogFragment完全清楚.

通过将样式项设置android:windowIsFloating为true(默认值),可以DialogFragment显示我想要的样式,但背景非常暗淡.

通过设置android:windowIsFloating为false,我得到了我想要的清晰背景,但DialogFragment可以吹到屏幕的大约95%,只留下一个小小的间隙,你可以看到它覆盖的视图.

我已经尝试了大量的调整,似乎无法覆盖这种行为.

我是否需要使用a PopupWindow来实现所需的效果,或者是否有一些我可以覆盖的样式项?

Chr*_*rry 72

什么工作对我来说是调整WinowManager.LayoutParamsonStart()的的DialogFragment:

@Override public void onStart() {
    super.onStart();

    Window window = getDialog().getWindow();
    WindowManager.LayoutParams windowParams = window.getAttributes();
    windowParams.dimAmount = 0.90f;
    windowParams.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND;
    window.setAttributes(windowParams);
}
Run Code Online (Sandbox Code Playgroud)

  • +1,适合我.对于**没有暗淡**,使用`windowParams.dimAmount = 0;`.此外,您必须在`onStart()`而不是`onCreateView()`中执行此操作. (5认同)

Abh*_*hek 7

创建您自己的自定义对话框扩展FragmentDailog 并覆盖此方法

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);

    //set the dialog to non-modal and disable dim out fragment behind
    Window window = dialog.getWindow();
    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    return dialog;
}
Run Code Online (Sandbox Code Playgroud)

注意:这个答案适用于我的情况DialogFragmentBottomSheetDialogFragment