坑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);
网友评论