android popupWindow 在android 7.0上显示缺陷

一:popupWindow 简析 

1、含义

Popwindow就是Android上自定义的一个弹出窗口,是在当前activity的顶部的,可以在任意的位置显示,在显示的时候会阻塞UI线程。

2、构造

Popwindow可以直接通过构造方法获取

new PopupWindow(View contentView,intwidth,intheight,booleanfocusable)

构造方法有很多,但是要确保contentview ,width,hight的设置,否则Popwindow不会显示任何内容

这些参数也都可以单独进行设置,比如 popwindow.setContentView(contentView);

3、解析

popwindow的难点就在于这几个参数的设置,一般容易使人迷惑。

popupWindow1.setFocusable(true);//获取焦点

popupWindow1.setOutsideTouchable(true);//获取外部触摸事件

popupWindow1.setTouchable(true);//能够响应触摸事件

popupWindow1.setBackgroundDrawable(newColorDrawable(0x8f000000));//设置背景

二:popupWindow 7.0缺陷

由于popupWindow是一个比较成熟的弹出框的控件,广泛运用于android app项目设计中。 

在使用showAsDropDown时候我们会发现 原本显示中部的popupWindow,变成了顶部或者底部,整个app呈现显示错乱的方式。不仅造成了显示错乱,在一些业务app中更是容易造成一些数据加载错乱和崩溃问题。 解决办法最简单是继承 popupWindow的子类中重写 showAsDropDown()方法,由于谷歌在7.1版本以及更新了这个缺陷补丁,所有只需要在sdk24时候做判断。

@Override

publicvoidshowAsDropDown(View anchor) {

        if(Build.VERSION.SDK_INT ==24&& anchor!=null) {            

                Rect rect =newRect();            

                anchor.getGlobalVisibleRect(rect);

                inth=anchor.getResources().getDisplayMetrics().            

                heightPixels -rect.bottom;                                   

                setHeight(h);        

        }

        super.showAsDropDown(anchor);    

}

你可能感兴趣的:(android popupWindow 在android 7.0上显示缺陷)