构造方法:public PopupWindow(View contentView,int width,int height,booleanfocusable)
contentView为要显示的View,width和height为宽和高,值为像素值,也可以是match_parent和wrap_content.
还可以直接:
publicPopupWindow(Context context)
publicPopupWindow(View contentView,int width,int height)
publicPopupWindow(View contentView)
改变PopupWindow的视图内容
public voidsetContentView(View contentView)
获取PopupWindow的视图内容
public ViewgetContentView()
显示PopupWindow:
- showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
- showAsDropDown(View anchor,int xoff,int yoff):相对某个控件的位置,有偏移
- showAtLocation(View parent,int gravity,int x,int y):相对于父控件的位置,可以设置偏移或无偏移
大小:
有两种方法设置PopupWindow的大小
- 调用有宽高参数的构造函数:
LayoutInflaterinflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View contentView=inflater.inflate(R.layout.popup_process,null);
PopupWindow popupWindow=newPopupWindow(contentView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
- 通过setWidth和setHeight设置
PopupWindow popupWindow=new PopupWindow(contentView);
popupWindow.setWidth(LayoutParams.WRAP_CONTENT);
popupWindow.setHeight(LayoutParams.WRAP_CONTENT);
两种方法是等效的,不管采用何种何种方法,必须设置宽和高,否则不显示任何东西。
这里的wrap_content可以换成match_parent或其它具体的数值,它是指popupWindow的大小,也就是contentView的大小,注意popupWindow根据这个大小显示View。如果View本身是从xml得到的,那么xml的第一层view的大小属性将被忽略。
点击空白处的时候让PopupWindow消失
- 要让点击PopupWindow之外的地方后,PopupWindow消失,需要调用setBackgroundDrawable(new BitmapDrawable());
设置背景,为了不影响样式,这个背景是空的。也可以这样写:
setBackgroundDrawable(new ColorDrawable(0x00000000));
背景不为空但是完全透明。
popupWindow_view.setOnTouchListener(newView.OnTouchListener(){
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
//如果菜单存在并且为显示状态,就关闭菜单并初始化菜单
if(popupWindow!=null&&popupWindow.isShowing()){
popupWindow.dismiss();
popupWindow=null;
}
returnfalse;
}
});