PopupWindow与AlertDialog的使用

一。 二者的区别:
AlertDialog和PopupWindow区别是后者是线程阻塞的。前者的位置固定,而后者的位置灵活随意。
二。主要方法注解:

1 showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
2 showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
3 showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移

三。使用

初始化控件

 private void initPopupWindow(View view){

//view窗体的显示控件
mPopupWindow=new PopupWindow(view, LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

//mPopupWindow.setBackgroundDrawable(new BitmapDrawable());//必须设置background才能消失

            //mPopupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.rounded_corners));

//mPopupWindow.setOutsideTouchable(false);

动画效果

//自定义动画
//mPopupWindow.setAnimationStyle(R.style.PopupAnimation);
//使用系统动画        //mPopupWindow.setAnimationStyle(android.R.style.Animation_Translucent);
            mPopupWindow.update();

获得焦点及可touch

    mPopupWindow.setTouchable(true);

            mPopupWindow.setFocusable(true);
        }

显示PopUpWindow

private void showPopupWindow(View anchor) {

            if(!mPopupWindow.isShowing()){

                mPopupWindow.showAsDropDown(anchor,-25,10);

                //mPopupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);

            }

        }

popupWindow全屏,区别是否点击了特定view

popView.setOnTouchListener(new OnTouchListener() {



            @Override

            public boolean onTouch(View v, MotionEvent event) {

                // TODO Auto-generated method stub

                if(v.getId()==R.id.action_click){

                    Toast.makeText(MainActivity.this, "pop的button", 1000).show();

                }else{
                    dismissI();

                }

                return false;

            }

        });

点击外围区域包括back键,popUpWindow不消失

第一次实现的时候遇到了问题,就是弹出框不会在按下Back键的时候消失,点击弹框外区域也没有正常消失,搜索了一下,都说只要设置背景就好了。

  然后我就找了个图片,果然弹框能正常dismiss了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值