构造方法
1 2 3 4 5 6 7 |
public PopupWindow (View contentView, int width, int height) // contentView 内容 // width 宽 // height 高 PopupWindow(View contentView, int width, int height, boolean focusable) // focusable 为 true 时, 返回键隐藏,可输入... |
常用的方法
- boolean isShowing() 窗口是否显示在屏幕上
- void dismiss() 让窗口消失
- void setAnimationStyle(int animationStyle) 设置消失显示的动画
- void setHeight(int height) 改变窗口高度,如果窗口已显示,下次生效
- void setWidth(int width)改变窗口宽度,如果窗口已显示,下次生效
- void setContentView(View contentView) 改变弹出框里的内容(layout 获取的view)
- void setFocusable(boolean focusable) 设置是否获取焦点
- void setTouchable(boolean touchable) 设置弹出框是否可触摸
- void setOutsideTouchable(boolean touchable) 设置弹出框之外的区域是否可触摸
- void showAsDropDown(View anchor, int xoff, int yoff) 显示弹出框在anchor左下角, xoff, yoff指xy轴上的偏移量
- void showAsDropDown(View anchor)
显示弹出框在anchor左下角
其它相关的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//获取屏幕长宽 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); wm.getDefaultDisplay().getHeight(); wm.getDefaultDisplay().getWidth(); // 获取状态栏高度frame.top Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); imageView.getHeight();//getHeight()获取ImageView组件显示出的高度 //获取状态栏高度 Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); SettingStatic.stateBarHeight=frame.top; |
设置显示位置
public void showAtLocation (View parent, int gravity, int x, int y)
Parameters
parent a parent view to get the getWindowToken() token from,
指该PopupWindow所在的Activity上存在的View.
gravity
x: x方向的偏移
y: y方向的偏移
-
以上三个参数共同决定PopupWindow的位置,gravity(值为Gravity.LEFT | Gravity.CENTERVERTICAL e.g)决定PopupWindow在屏幕的左侧中间位置(如果不加Gravity.CENTERVERTICAL只写Gravity.LEFT,也会达到同样的效果,这是因为系统默认设置为Gravity.CENTER_VERTICAL(既上下方的中间位置))。
-
x.y的坐标是相对于gravity的设置而言。如上面描述,如果gravity定义PopupWindow位置在屏幕左侧中间,那么x.y坐标就是相对于左侧中间(0,屏幕高度的一半)为参考点。而不是以屏幕左上方(0,0)为参考点.
这对于如何觉定PopupWindow的弹出位置至关重要。 -
ListView加载到popupwindow,如果不设置setFocusable(true),不仅效果没有,连背后的事件都无法响应,这是需要加上一句话:sPopupWindow.setBackgroundDrawable(new BitmapDrawable()); 就可以解决
-
当PopupWindow弹出时,点击menu键不会有什么反应,监听PopuoWindow中任意一个子View(不能是PopupWindow所使用的最外层根View)的setOnKeyListener事件即可
PopupWindow点击其它区域消失
重写Activity中的onTouchEvent方法,
1 2 3 4 5 6 7 8 9 |
@Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if(popupwindow!=null&&popupwindow.isShowing()){ popupwindow.dismiss(); popupwindow=null; } return super.onTouchEvent(event); } |
1 2 3 4 5 |
// 必须设置背景 pWindow.setBackgroundDrawable(new BitmapDrawable()); // 设置点击其他地方 就消失 (只设置这个,没有效果) pWindow.setOutsideTouchable(true); 做这两个设置后,再show。然后才能实现点击窗口外自动消失 |
0 Comments