背景清晰的DialogFragment(不变灰)

我试图让DialogFragment背景完全清晰。

将样式项android:windowIsFloating为true(默认值), DialogFragment显示我想要的样子,但背景非常暗淡。

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

我已经尝试了吨的调整,似乎无法重写这种行为。

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

Solutions Collecting From Web of "背景清晰的DialogFragment(不变灰)"

什么对我来说就是调整WinowManager.LayoutParamsonStart()中的WinowManager.LayoutParams :

 @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); } 

您需要获取DialogFrament的句柄(在调用.show之后的某个时间),然后在发布的Runnable中执行此操作:

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

我从Aleks G的答复中了解到在屏幕android上更改对话框的位置 。

更简单的解决scheme是改变DialogFragment的onCreate中的样式:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NO_FRAME, getTheme()); } 

使用FragmentDailog创build自己的定制对话框并覆盖此方法

 @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情况下适用于我