问题:
1,Dialog默认会显示在屏幕正中间位置,如何控制其显示位置?
2,如何在点击位置显示Dialog?
Dialog默认会显示在屏幕正中间位置,如何控制其显示位置?
控制dialog的弹出位置:
通过Window类的setGravity(int)来进行设置。
如:在屏幕顶端显示:
Dialogdialog = dialog = new Dialog(this, R.style.dialog);
dialog.setContentView(R.layout.q006_dialog); //R.layout.q006_dialog为自定义的dilog布局
Windowmwindow = dialog.getWindow();
mwindow.setGravity(Gravity.TOP);
dialog.show();
如何在点击位置显示Dialog?
首先,需要获得被点击View的绝对坐标:
//假设屏幕中有一个ImageView img,获得其在屏幕上的坐标
finalint[] location = new int[2];
img.getLocationOnScreen(location);
然后,通过设置WindowManager.LayoutParams,控制Dialog显示位置
WinowManager.LayoutParams lp = mwindow.getAttributes();
lp.x= location[0];
lp.y= location[1];
Toast.makeText(context,"x:"+lp.x+",y:"+lp.y, 3000).show();
mwindow.setAttributes(lp);
备注:还可以通过view的getHeight(),getWidth()方法获得view的宽度、高度信息,进一步设置dialog位置。
如:
lp.x= location[0] - img.getHeight();
lp.y= location[1] - img.getWidth();
此外,还可以通过设置lp的alpha控制dialog的透明度。
默认显示的对话框是不透明的,可以通过设置对话框的alpha值将其变成透明或半透明效果。颜色由R(红)、 G(绿)、B(蓝)组成。除此,还会有一个A(透明度,Alpha)来描述颜色。在颜色的描述中,值为0表示完全透明,值为255,表示不透明。
通过设置Windows的alpha属性也可以设置对话框的透明度。但alpha的取值范围是从0到1.0。如果该属性值为0,表示完全透明,如果该值为1.0,表示不透明(也就是正常显示的对话框)。
如:lp.alpha = 0.5f;