当前位置: 代码迷 >> 综合 >> PopupWindow 可以指定弹窗的位置以及背景色等特性
  详细解决方案

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

热度:78   发布时间:2023-09-18 11:42:27.0

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的显示方法:

PopupWindow 可以指定弹窗的位置以及背景色等特性
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);//从屏幕底部弹出


            }}





  相关解决方案