本文首发于公众号“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 name="MyDialogTheme" parent="@style/Theme.Design.BottomSheetDialog" ><item name="android:windowIsFloating">false</item><item name="android:backgroundDimAmount">0.5</item><item name="android:backgroundDimEnabled">true</item><item name="android:windowFullscreen">true</item><item name="android:windowContentOverlay">@null</item></style>
需要注意的是,这个backgroundDimAmount
的数值🈷️接近1,则背景越黑,如果是1的话就是完全看不到背景
欢迎关注我的公众号AntDream查看更多精彩文章!