PopupWindow 防微信弹出右 侧窗体(继承PopupWindow )
1, pop自定义
public class SelectPicPopupWindow extends PopupWindow { private Button btn_take_photo, btn_pick_photo, btn_cancel; private View mMenuView; public SelectPicPopupWindow(Activity context,OnClickListener itemsOnClick) { //暴露出点击事件 super(context); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mMenuView = inflater.inflate(R.layout.alert_dialog, null); btn_take_photo = (Button) mMenuView.findViewById(R.id.btn_take_photo); btn_pick_photo = (Button) mMenuView.findViewById(R.id.btn_pick_photo); btn_cancel = (Button) mMenuView.findViewById(R.id.btn_cancel); //取消按钮 btn_cancel.setOnClickListener(new OnClickListener() { public void onClick(View v) { //销毁弹出框 dismiss(); } }); //设置按钮监听 btn_pick_photo.setOnClickListener(itemsOnClick); btn_take_photo.setOnClickListener(itemsOnClick); //设置SelectPicPopupWindow的View this.setContentView(mMenuView); //设置SelectPicPopupWindow弹出窗体的宽 this.setWidth(LayoutParams.FILL_PARENT); //设置SelectPicPopupWindow弹出窗体的高 this.setHeight(LayoutParams.WRAP_CONTENT); //设置SelectPicPopupWindow弹出窗体可点击
this.setFocusable(true); //设置SelectPicPopupWindow弹出窗体动画效果 this.setAnimationStyle(R.style.AnimBottom); //实例化一个ColorDrawable颜色为半透明 ColorDrawable dw = new ColorDrawable(0xb0000000); //设置SelectPicPopupWindow弹出窗体的背景 this.setBackgroundDrawable(dw); //mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框 mMenuView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { int height = mMenuView.findViewById(R.id.pop_layout).getTop(); //高度 int y=(int) event.getY(); if(event.getAction()==MotionEvent.ACTION_UP){ if(y<height){ dismiss(); } } return true; } }); } }
2 ,使用的时候
//把文字控件添加监听,点击弹出自定义窗口 tv.setOnClickListener(new OnClickListener() { public void onClick(View v) { //实例化SelectPicPopupWindow menuWindow = new SelectPicPopupWindow(MainActivity.this, itemsOnClick); //显示窗口 menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置 } }); } //其中的mian id 必须在layout 中写出,不然,找不到id 就不会显示在屏幕中。 //为弹出窗口实现监听类 private OnClickListener itemsOnClick = new OnClickListener(){ //pop的点击事件 public void onClick(View v) { menuWindow.dismiss(); switch (v.getId()) { case R.id.btn_take_photo: break; case R.id.btn_pick_photo: break; default: break; } } };