前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android中如何动态的调整Dialog的背景深暗

Android中如何动态的调整Dialog的背景深暗

作者头像
AntDream
发布2024-06-24 20:19:34
770
发布2024-06-24 20:19:34
举报

在 Android 开发中,当你使用 Dialog 或 DialogFragment 时,可以通过设置 Window 的背景变暗来突出它的可见性。这个效果是通过 dimAmount 属性来控制的。

那我们怎么动态设置dimAmount呢?

DialogFragment

假设你正在使用 DialogFragment,那么你可以在 onCreateDialogonViewCreated 方法中配置 Dialog 的窗口属性。

DialogFragment 中设置 dimAmount

代码语言:javascript
复制
public class MyDialogFragment extends DialogFragment {

    @Override
    public 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中调用上面的代码
    @Override
    public 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 并在需要时更新它:

代码语言:javascript
复制
public class MyDialogFragment extends DialogFragment {

    private WindowManager.LayoutParams layoutParams;

    @Override
    public 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

代码语言:javascript
复制
MyDialogFragment dialogFragment = new MyDialogFragment();
dialogFragment.show(getSupportFragmentManager(), "MyDialog");

// 动态调整dimAmount
dialogFragment.updateDimAmount(0.8f); // 将dimAmount调整为0.8

这样你就可以在不同情况下动态调整 Dialog 的 dimAmount 了。

Dialog

Dialog 中设置 dimAmount

如果你直接使用 Dialog 而不是 DialogFragment,你可以在创建 Dialog 时设置 dimAmount

代码语言:javascript
复制
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

代码语言:javascript
复制
<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的话就是完全看不到背景。

作者介绍

中年程序猿,十年移动端开发老司机,分享一线开发经验和知识,正在探索通过副业渡过中年危机

越努力越幸运,加油💪,一起遇见更好的自己

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AntDream 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DialogFragment
    • 动态调整 dimAmount
    • Dialog
    • 静态的方式
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档