这篇主要解决一些我在自定义dialog时的一些问题。
先直接上代码。写在自定义Dialog类的oncreate方法中。
// 获取窗口对象
Window dialogWindow = this.getWindow();
WindowManager m = context.getWindowManager();
// 获取屏幕宽、高用
Display d = m.getDefaultDisplay();
// 获取对话框当前的参数值
WindowManager.LayoutParams p = dialogWindow.getAttributes();
// 高宽度设置
p.width = (int) (d.getWidth() * 0.76);
p.height = (int) (d.getHeight() * 0.835);
p.dimAmount = 0f;//取消背景模糊
//相对于中心点的偏移量
p.x = 500;
p.y = -500;
dialogWindow.setBackgroundDrawableResource(R.color.transparent);//去掉Dialog周围的padding
dialogWindow.setAttributes(p);
1、最近一个项目需要做一个弹窗,但是需要做到背景全透明的效果,dialog默认的背景是弹出dialog时背景变暗。首先获取窗口对象,然后获取当前对话框的参数值,最后p.dimAmount = 0f;就可以设置背景透明。
2、做项目时发现弹窗会自动变成最小布局,也就是只显示最小的一部分,就像自动变成了Wrap_content,那么怎么设置成全屏或者其他大小呢?
与1中一样,首先还是要先获取窗口对象和对会话框当前参数值,然后还要获取屏幕高宽。最后设置高宽度就行了。其中的乘数就是占屏幕的比例(见代码)
3、做项目时还发现对弹窗位置有要求,本来是需要填充满整个fragment,但是找了很多办法都没有实现,所以只能调整弹窗的相对位置,首先我们需要知道dialog默认是在中心位置弹出的。接下来,仍然需要获取窗口对象和对话框当前的参数值,然后设置相对于中心点的偏移量就行。
4、最后一个问题,我在调用dialog时发现即使设置了填充全屏仍然会有一圈类似padding的背景,这时候只需要调用dialogWindow.setBackgroundDrawableResource(R.color.transparent);就行了。