Android7.0上PopupWindow的showAsDropDown位置问题 参数无效

网上方法:

@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);
    }

但是没有效果,其实方法是ok的,没效果是因为

new MyPopupWindow(contentView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
初始化时设置了充满屏幕,所以后面的位移就没有了效果。

其实我们可以通过计算屏幕高度减去topView的Y值来计算pop的所需高度,达到填充慢屏幕的效果:

int[] location = new int[2];
lineSelect.getLocationOnScreen(location);//lineSelect是一个view,表示显示在她的上方
int y = location[1];
popHeight = App.instance.getSCHeight() - y;
初始化时:

mPopupWindow_job = new MyPopupWindow(contentView, ViewGroup.LayoutParams.MATCH_PARENT, popHeight);


我想这就是为什么很多人对网上给出的重写showAsDropDowm()方法质疑的原因了

不过7.0以上为什么会出现这样的问题呢,这是bug吗???哎,每个版本都悄悄挖几个坑,这是难为我们这些吃老本的了。。。。


你可能感兴趣的:(其实很简单)