受欢迎的大连网站建设,网站群建设公司排行榜,下载安装微信,百度网站提交地址本文首发于公众号“AntDream”#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注#xff0c;和我一起每天进步一点点 在 Android 开发中#xff0c;当你使用 Dialog 或 DialogFragment 时#xff0c;可以通过设置 Window 的背景变暗来突出它的可见性。这个效果… 本文首发于公众号“AntDream”欢迎微信搜索“AntDream”或扫描文章底部二维码关注和我一起每天进步一点点 在 Android 开发中当你使用 Dialog 或 DialogFragment 时可以通过设置 Window 的背景变暗来突出它的可见性。这个效果是通过 backgroundDimAmount 属性来控制的。
那我们怎么动态设置backgroundDimAmount呢
DialogFragment
假设你正在使用 DialogFragment那么你可以在 onCreateDialog 或 onViewCreated 方法中配置 Dialog 的窗口属性。
在 DialogFragment 中设置 backgroundDimAmount
public class MyDialogFragment extends DialogFragment {Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {Dialog dialog super.onCreateDialog(savedInstanceState);Window window dialog.getWindow();if (window ! null) {WindowManager.LayoutParams layoutParams window.getAttributes();layoutParams.dimAmount 0.5f; // 设置dimAmount为0.5即背景变得半透明window.setAttributes(layoutParams);window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);}return dialog;}// 如果你的DialogFragment使用的是布局文件需要在onViewCreated中调用上面的代码Overridepublic void onViewCreated(NonNull View view, Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);Window window getDialog().getWindow();if (window ! null) {WindowManager.LayoutParams layoutParams window.getAttributes();layoutParams.dimAmount 0.5f; // 设置dimAmount为0.5即背景变得半透明window.setAttributes(layoutParams);window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);}}
}动态调整 dimAmount
如果你需要在应用运行时根据某些条件动态调整 dimAmount可以通过保存 WindowManager.LayoutParams 并在需要时更新它
public class MyDialogFragment extends DialogFragment {private WindowManager.LayoutParams layoutParams;Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {Dialog dialog super.onCreateDialog(savedInstanceState);Window window dialog.getWindow();if (window ! null) {layoutParams window.getAttributes();layoutParams.dimAmount 0.5f; // 初始设置window.setAttributes(layoutParams);window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);}return dialog;}public void updateDimAmount(float dimAmount) {if (layoutParams ! null) {layoutParams.dimAmount dimAmount;if (getDialog() ! null getDialog().getWindow() ! null) {getDialog().getWindow().setAttributes(layoutParams);}}}
}然后你可以通过调用 updateDimAmount 来动态调整 dimAmount
MyDialogFragment dialogFragment new MyDialogFragment();
dialogFragment.show(getSupportFragmentManager(), MyDialog);// 动态调整dimAmount
dialogFragment.updateDimAmount(0.8f); // 将dimAmount调整为0.8这样你就可以在不同情况下动态调整 Dialog 的 backgroundDimAmount 了。
Dialog
在 Dialog 中设置 backgroundDimAmount
如果你直接使用 Dialog 而不是 DialogFragment你可以在创建 Dialog 时设置 dimAmount
Dialog dialog new Dialog(context);
dialog.setContentView(R.layout.dialog_layout);
Window window dialog.getWindow();if (window ! null) {WindowManager.LayoutParams layoutParams window.getAttributes();layoutParams.dimAmount 0.5f; // 设置dimAmount为0.5即背景变得半透明window.setAttributes(layoutParams);window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}dialog.show();静态的方式
静态的方式也就是创建Dialog时直接设置主题theme
style nameMyDialogTheme parentstyle/Theme.Design.BottomSheetDialog item nameandroid:windowIsFloatingfalse/itemitem nameandroid:backgroundDimAmount0.5/itemitem nameandroid:backgroundDimEnabledtrue/itemitem nameandroid:windowFullscreentrue/itemitem nameandroid:windowContentOverlaynull/item/style需要注意的是这个backgroundDimAmount的数值️接近1则背景越黑如果是1的话就是完全看不到背景 欢迎关注我的公众号AntDream查看更多精彩文章