关于popupWindow的使用

来源:互联网 发布:淘宝购物节qq空间 编辑:程序博客网 时间:2024/05/20 21:22
 findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            showPopupWindow(v);        }    });private void showPopupWindow(View v) {    View converView = LayoutInflater.from(this).inflate(R.layout.popup, null);    Button b = (Button) converView.findViewById(R.id.b);    converView.setFocusable(true);//很关键    converView.setFocusableInTouchMode(true);    b.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();        }    });    final PopupWindow win = new PopupWindow(converView, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT, true);//此处要设置PopupWindow的Focusable为true    converView.setOnKeyListener(new View.OnKeyListener() {        @Override        public boolean onKey(View v, int keyCode, KeyEvent event) {            if(keyCode == KeyEvent.KEYCODE_BACK){                win.dismiss();                return true;            }            return false;        }    });    win.setTouchable(true);    win.setOutsideTouchable(false);        win.showAtLocation(v, Gravity.BOTTOM, 0, 0);}
实现了 点击空白弹窗不会消失,只有按返回键才会消失。
如果想要点击空白也消失 可是设置:win.setBackgroundDrawable(new ColorDrawable(0x00000000));
实现当弹窗出现屏幕变暗的效果
//添加一个设置屏幕透明度的方法private void backgroundAlpha(float a) {    WindowManager.LayoutParams lp = getWindow().getAttributes();    lp.alpha = a;    getWindow().setAttributes(lp);}
//此方法监听弹窗消失的时候,将透明度还原
backgroundAlpha(0.5f);
pw.setOnDismissListener(new PopupWindow.OnDismissListener() {    @Override    public void onDismiss() {        backgroundAlpha(1f);    }});
//可以得到view在整个屏幕的坐标 location[0]为X轴 location[1]为Y轴
int[] location = new int[2];v.getLocationOnScreen(location);

0 0