具有清晰背景的 DialogFragment(未变暗)
Posted
技术标签:
【中文标题】具有清晰背景的 DialogFragment(未变暗)【英文标题】:DialogFragment with clear background (not dimmed) 【发布时间】:2012-11-29 03:48:22 【问题描述】:我试图让DialogFragment
的背景完全清晰。
将样式项 android:windowIsFloating
设置为 true(默认),
DialogFragment
完全按照我想要的方式显示,但背景非常暗。
通过将 android:windowIsFloating
设置为 false,我得到了我想要的清晰背景,但 DialogFragment 炸毁了大约 95% 的屏幕,
在它周围只留下一个很小的间隙,您可以看到它所覆盖的视图。
我尝试了很多调整,但似乎无法覆盖此行为。
是否需要使用PopupWindow
才能达到想要的效果,或者有什么风格
我可以覆盖的项目?
【问题讨论】:
我刚刚遇到了 LayoutParameter 标志 WindowManager.LayoutParams.FLAG_DIM_BEHIND。希望这能做到…… 【参考方案1】:对我有用的是调整onStart()
中的WinowManager.LayoutParams
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);
【讨论】:
+1,为我工作。对于完全没有暗淡,请使用windowParams.dimAmount = 0;
。此外,您必须在onStart()
中执行此操作,而不是在onCreateView()
。
为什么它只在onStart()
有效,为什么在onCreateView()
无效?
@zIronManBox 对话框尚未在onCreateView()
中呈现/实例化。
@Jonik 不,你不需要联系windowParams.dimAmount
。只需从windowParams.flags
中删除WindowManager.LayoutParams.FLAG_DIM_BEHIND
此解决方法仍在工作 2021.11.18【参考方案2】:
使用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;
注意:此答案适用于 DialogFragment
和 BottomSheetDialogFragment
【讨论】:
为我工作window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
【参考方案3】:
您需要获取 DialogFrament 的句柄(有时在调用 .show 之后), 并在 Posted Runnable 中执行此操作:
DialogFragment dialog;
...
WindowManagerLayoutParams wlp = dialog.Dialog.Window.Attributes;
wlp.Flags &= ~WindowManagerFlags.DimBehind;
dialog.Dialog.Window.Attributes = wlp;
我是从 Aleks G 对Changing position of the Dialog on screen android 的回答中得到的。
【讨论】:
【参考方案4】:甚至更简单的解决方案是改变DialogFragment的onCreate中的样式:
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, getTheme());
【讨论】:
这也会删除对话框标题以上是关于具有清晰背景的 DialogFragment(未变暗)的主要内容,如果未能解决你的问题,请参考以下文章