Popuwindow 在Android7.0 上显示Bug

来源:互联网 发布:java redis缓存用法 编辑:程序博客网 时间:2024/06/05 21:00

手机测试的时候发现 Popuwindow 在Android7.0 上显示的不是自己设定的布局,而是充满全屏。网上搜索也找到了解决办法。第一次写,就从bug开始写起。

  • bug图片

  • 解决方法
    重写popuwindow

public class CustomPopuWindow extends PopupWindow {    public CustomPopuWindow(View contentView, int width, int height){        super(contentView,width,height);    }    /**     * 在android7.0上,如果不主动约束PopuWindow的大小,比如,设置布局大小为 MATCH_PARENT,那么PopuWindow会变得尽可能大,     * 以至于 view下方无空间完全显示PopuWindow,而且view又无法向上滚动,此时PopuWindow会主动上移位置,直到可以显示完全。     * 解决办法:主动约束PopuWindow的内容大小,重写showAsDropDown方法:     * @param anchor     */    @Override    public void showAsDropDown(View anchor) {        if(Build.VERSION.SDK_INT == 24) {            Rect rect = new Rect();            anchor.getGlobalVisibleRect(rect);            int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom;            setHeight(h);        }        super.showAsDropDown(anchor);    }    @Override    public void showAsDropDown(View anchor, int xoff, int yoff) {        if(Build.VERSION.SDK_INT == 24) {            Rect rect = new Rect();            anchor.getGlobalVisibleRect(rect);            int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom;            setHeight(h);        }        super.showAsDropDown(anchor, xoff, yoff);    }}