PopupWindow 可以指定弹窗的位置以及背景色等特性

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); //点击窗口外边窗口消失时设置为true
5,public void setBackgraoundDrawable(Drawable  background)//需要设置一下此参数,点击外边才可消失  
// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
6,public void setAnimationStyle(int animationStyle);//设置pop的动画  先在anim中定义进入和出去的动画,然后再在style 中创建<style  name = ""><item />item /></style>
<style name="pop_animation">
    <item name="android:windowEnterAnimation">@anim/enter_animation</item>
    <item name="android:windowExitAnimation">@anim/out_animation</item>
</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);//从屏幕底部弹出


            }
        }





  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值