关于对话框和popupwindow的设置指定大小和位置的小结

来源:互联网 发布:中国跳水最厉害的知乎 编辑:程序博客网 时间:2024/06/03 12:41

最近研究了下dialog'和popupwindow,它们都能在当前界面弹出一个窗口,外观上的区别是一dialog弹出后背景会失去焦点(背景变暗),popupwindow则默认不会。

使用的时候也有些区别。

一 dialog  

1 常用的dialog 应该是v7包下的alertdialog 了,通过内部类builder设置创建一个对话框实例。

默认的对话框有如下特点:

1 width 大小和屏幕宽度差不多

2 高度   基本上是包裹内容的

3 显示在屏幕中间   弹出后获得焦点 北京变灰

如果想要定义对话框的大小则需要通过window 的属性来设置

2 其他的dialog 在创建的时候会默认的添加一个头部视图,没有内容则会空出一片地方,alertdialog则不会。

WindowManager.LayoutParams lp = mDialog.getWindow().getAttributes();// lp.alpha = 0.3f;//透明度//lp.width = 300;//宽高,可以指定具体的值,也可以根据屏幕的宽高设定百分比//lp.height = 200;//mDialog.getWindow().setAttributes(lp);//按照屏幕百分比来设置大小Display display = getWindowManager().getDefaultDisplay();// int width = (int) (display.getWidth() * 0.4);// int height = (int) (display.getHeight() * 0.2);// lp.height = height;// lp.width = width;// mDialog.getWindow().setAttributes(lp);
//也是按照屏幕百分比来设置大小DisplayMetrics dm = new DisplayMetrics();display.getMetrics(dm);lp.height = (int) (dm.heightPixels * 0.3);lp.width = (int) (dm.widthPixels * 0.5);mDialog.getWindow().setAttributes(l)
/如果想要修改对话框的宽高,需要通过设置对应的window 的属性//因为window属性的修改是通过 设置callback的接口实现的,实现里有一个view的判空操作,//该view会在show()方法里赋值,dimiss()中置空,所以需要在对话框show()之后设定window的属性
二 popupwindow
创建它的时候可以直接指定它的宽高,显示的内容,是否获取焦点等。弹出的时候可以通过重载的方法指定显示在哪里。
//获取布局填充器LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);View view = inflater.inflate(R.layout.popwin, null);//指定window的显示内容和 window的宽高,是否获取焦点等,选择合适的重载方法mWindow = new PopupWindow(view, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);// mWindow.setOutsideTouchable(true);//默认是falser// mWindow.setFocusable(true);//默认是false
//如果想使用popupwindow实现dialog的效果,可以通过window参数设置实现//通常不使用此方法改变宽高,可以改变透明度和背景颜色WindowManager.LayoutParams lp = getWindow().getAttributes();lp.alpha = 0.3f;getWindow().setBackgroundDrawable(new ColorDrawable(Color.GRAY));getWindow().setAttributes(lp);//popupwind 使用的window不是新创建的,是和对应的上下文的同一个窗口,不需要像dialog那样show之后再设置

三 小结
1 如果想改变对话框的大小需要在对话框show()之后,使用window的setattribtes()方法,它会触发监听从而改变。
2 popupwindow 想实现dialog的效果可以在设置它的时候直接设置

0 0
原创粉丝点击