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

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

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

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

DialogFragment

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

DialogFragment 中设置 backgroundDimAmount

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 
Android中,如果你想要动态地改变Dialog背景变暗效果(通常通过`WindowBackgroundDimEnabled`属性控制),你可以通过创建自定义DialogFragment或者直接操作Activity的`Window`对象来实现。这里是一个简单的例子: 1. 如果你在DialogFragment中: ```java import android.os.Bundle; import android.app.Dialog; import androidx.annotation.NonNull; import androidx.fragment.app.DialogFragment; public class CustomDialog extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.getWindow().setFlags( WindowManager.LayoutParams.FLAG_DIM_BEHIND, WindowManager.LayoutParams.FLAG_DIM_BEHIND); // 设置dim amount (透明度) dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 这里可以动态调整背景透明度,例如: int dimAmount = 50; // 0-255之间,值越大,背景越暗 dialog.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LIGHT_STYLED | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.getWindow().addFlags(View.SYSTEM_UI_FLAG_DARK_MODE); return dialog; } } ``` 2. 如果在Activity中,则需要获取到对应的Dialog对象: ```java Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // ... 其他Dialog配置 // 动态改变背景 dialog.getWindow().setFlags( WindowManager.LayoutParams.FLAG_DIM_BEHIND, WindowManager.LayoutParams.FLAG_DIM_BEHIND); // 同样调整dimAmount 和 添加系统UI flags dialog.show(); ``` 记得在适当的时候调用`dialog.dismiss()`关闭Dialog
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值