Android Dialog 的设置大小与透明的坑

坑1:全屏

Dialog 自定义的大小的代码为:

WindowManager.LayoutParams params = getWindow().getAttributes();

params.height = WindowManager.LayoutParams.MATCH_PARENT;

params.width = WindowManager.LayoutParams.MATCH_PARENT;

getWindow().setAttributes(params);

或:

getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT);

但是这个方法必须在show()方法或者setContentView()方法之后才有用。

原因是每次window.setContentview()方法内部,每次都会强制设置window的大小为warp_content。

有兴趣可以参看这篇源码分析 https://www.jianshu.com/p/d02e54ddcf97

坑2:透明度

先是在网上看到diglog设置透明的的代码有:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

getWindow().setBackgroundDrawable(new ColorDrawable());

亲测没用:

有用的做法其实是,dialog的暗色背景其实不是背景图片而是 dialog的模糊值dimAmount。

下面是几种处理方法,可以一个一个试,总一个款适合你的问题。

1.设置透明度(Dialog自身的透明度)

WindowManager.LayoutParams lp=dialog.getWindow().getAttributes();

lp.alpha=1.0f;

dialog.getWindow().setAttributes(lp);


alpha在0.0f到1.0f之间。1.0完全不透明,0.0f完全透明

2.设置黑暗度(Dialog自身的黑暗度)

dialog.setContentView(R.layout.dialog);      

WindowManager.LayoutParams lp=dialog.getWindow().getAttributes();

lp.dimAmount=1.0f;

dialog.getWindow().setAttributes(lp);

dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

dimAmount在0.0f和1.0f之间,0.0f完全不暗,1.0f全暗

3.设置Dialog底背景模糊和黑暗度

WindowManager.LayoutParams.FLAG_BLUR_BEHIND(设置模糊)

WindowManager.LayoutParams.FLAG_DIM_BEHIND(设置暗淡)

4.清除Dialog底背景模糊和黑暗度

getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND | WindowManager.LayoutParams.FLAG_DIM_BEHIND)

WindowManager.LayoutParams params = getWindow().getAttributes();

params.height = WindowManager.LayoutParams.MATCH_PARENT;

params.width = WindowManager.LayoutParams.MATCH_PARENT;

getWindow().setAttributes(params);

你可能感兴趣的:(Android Dialog 的设置大小与透明的坑)