1,PopupWindow的构造方法:
contentView为要显示的view,width和height为宽和高,值为像素值,也可以是MATCHT_PARENT和WRAP_CONTENT。
1,public PopupWindow(Context c); 传入context 参数获取popupwindow对象
2,public PopupWindow(View view);; 传入View 参数获取popupwindow对象
popwindow.setContentView(view);
public View getContentView(); PopupWindow提供的获取试图的方法
3, public PopupWindow(View view ,int width,int height); width 为pop的宽 height为pop的高
4, public PopupWindow(View view ,int width,int height,boolean facusable);
2,PopupWindow的显示方法:
1,showAsDropDown(View v) //相对v控件的正下方
2, showAsDropDown(View v, int x, int y) //相对v控件有偏移,x轴偏移,x>0表示向左 ,x<0表示向右,y >0表示向下 反之 向上
3,showAtLocation(View parent, int gravity,int x, int y)//相对父控件位置 中央Gravity.CENTER,下方Gravity.BOTTOM x,y 偏移量
3,pop函数:
1,public void dicmiss ();//pop消失时调用
2,public void setFocusable(boolean focusable)
3,public void setTouchable(boolean touchable)
4,public void setOutsideTouchable(boolean touchable);
5,public void setBackgraoundDrawable(Drawable background)
// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
6,public void setAnimationStyle(int animationStyle);//设置pop的动画 先在anim中定义进入和出去的动画,然后再在style 中创建
popupWindow = new PopupWindow(popView, 300, 400, true);
if(!popupWindow.isShowing()) {
// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
// 我觉得这里是API的一个bug
popupWindow.setBackgroundDrawable(new BitmapDrawable());
//设置点击窗口外边窗口消失
popupWindow.setOutsideTouchable(true);
// 设置此参数获得焦点,否则无法点击
popupWindow.setFocusable(true);
popupWindow.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false; // 这里如果返回true的话,touch事件将被拦截
// 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
}
});
if (popupWindow.isShowing()) {
// 隐藏窗口,如果设置了点击窗口外小时即不需要此方式隐藏
popupWindow.dismiss();
} else {
// 显示窗口
// popupWindow.showAsDropDown(ivChoose);//任意控件的正下方
popupWindow.setAnimationStyle(R.style.pop_animation);
popupWindow.showAtLocation( rootview, Gravity.BOTTOM, 0, 0);//从屏幕底部弹出
}
}