PopupWindow 总结

构造方法

常用的方法

  • 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左下角

其它相关的方法

设置显示位置

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方向的偏移

  1. 以上三个参数共同决定PopupWindow的位置,gravity(值为Gravity.LEFT | Gravity.CENTERVERTICAL e.g)决定PopupWindow在屏幕的左侧中间位置(如果不加Gravity.CENTERVERTICAL只写Gravity.LEFT,也会达到同样的效果,这是因为系统默认设置为Gravity.CENTER_VERTICAL(既上下方的中间位置))。

  2. x.y的坐标是相对于gravity的设置而言。如上面描述,如果gravity定义PopupWindow位置在屏幕左侧中间,那么x.y坐标就是相对于左侧中间(0,屏幕高度的一半)为参考点。而不是以屏幕左上方(0,0)为参考点.
    这对于如何觉定PopupWindow的弹出位置至关重要。

  3. ListView加载到popupwindow,如果不设置setFocusable(true),不仅效果没有,连背后的事件都无法响应,这是需要加上一句话:sPopupWindow.setBackgroundDrawable(new BitmapDrawable()); 就可以解决

  4. 当PopupWindow弹出时,点击menu键不会有什么反应,监听PopuoWindow中任意一个子View(不能是PopupWindow所使用的最外层根View)的setOnKeyListener事件即可

PopupWindow点击其它区域消失

重写Activity中的onTouchEvent方法,

0 Comments
Leave a Reply