popupwindow 弹出窗体

popupwindow 弹出窗体,和对话框类似是轻量级的窗体,可以在窗体中显示各种效果

1.创建popupwindow 弹出窗体,PopupWindow popupWindow = new PopupWindow(contentView,width,height);

contentView:是要显示的view对象,后面两个是高度跟宽度

2.定义一个view对象传入到contentView中

3.显示出来popupWindow.showAtLocation(parent,gravity,x,y);

parent:挂载在那个父控件

gravity:指定他的对齐方式,Gravity.LEFT|Gravity.TOP

后面的x和y分别指定与左边跟上边的偏移量

//popupwindow的窗体默认是透明的颜色,要指定popuwindow的窗体的背景颜色

popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));这里面的参数是drawable对象,上面的参数指定背景是透明的

上面的程序会有一个问题,就是如果弹出来的窗体后,点击其他地方窗体是不会消失,相当于对话框一样了,我们还可以创建另一个构造方法指定这个可以有焦点,那么如果另的组件抢走这个焦点,这个弹出窗体也会消失了.PopupWindow(contentView,width,height,onFource);后面那个指定是否可以获取焦点

注意在使用popupWindow的时候一定要给他设置窗体的背景颜色,如果不设置会出现问题,popupWindow不会自动关闭,在popupWindow里面的动画效果也不会显示了

 

在setOnItemClickListener()事件中的onItemClick()方法,第二个参数view 代表的是listView里面的每一个显示的条目

我们可以得到这个条目的位置

int[] location = new int[2];

view.getLocationInWindow(location);//把位置位置存在location数组中

 

停止popupwindow

if(popupwindow != null && popupwindow.isShowing()){popupwindow.dismiss(); }

有以下几种情况要取消popupwindow

1.点击另一条目时

2.屏幕发生滚动时

3.直接点后退会出错,窗体发生泄漏,因为popupwindow挂载的窗体被回收了,不会影响程序但是会在log中打印出错误日志,重写onDestory()方法中去关闭popupwindow 

 

popupwindow可以用xml布局,用View,inflate()方法创建一个view,然后把这个view做为popupwindow的view参数传入,也可以设置动画,这个布局设置一个动画

 

当popupwindow显示的时候,如果按了返回按钮就会报错,但是不会影响程序运行,因为popupwindow是挂在一个activity上的,如果activity消失了,但是popupwindow还没有取消,就会报错,应该在onDestory()的时候手动停止popupwindow.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章