30

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

将样式项目设置android:windowIsFloating为 true(默认值),DialogFragment显示完全符合我的要求,但背景非常暗淡。

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

我已经尝试了很多调整,但似乎无法覆盖这种行为。

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

4

4 回答 4

85

对我有用的是调整DialogFragmentWinowManager.LayoutParamsin :onStart()

@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);
}
于 2013-07-27T18:14:23.937 回答
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;
}

注意:这个答案适用于DialogFragmentBottomSheetDialogFragment

于 2016-09-22T10:50:37.587 回答
3

您需要获取 DialogFrament 的句柄(有时在调用 .show 之后),并在 Posted Runnable 中执行此操作:

DialogFragment dialog;

...

WindowManagerLayoutParams wlp = dialog.Dialog.Window.Attributes;
wlp.Flags &= ~WindowManagerFlags.DimBehind;
dialog.Dialog.Window.Attributes = wlp;

我从 Aleks G 对改变屏幕 android 上对话框的位置的回答中得到它。

于 2012-12-11T15:48:35.340 回答
1

甚至更简单的解决方案是更改 DialogFragment 的 onCreate 中的样式:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_FRAME, getTheme());
}
于 2014-04-10T19:59:02.580 回答