好久没写博客了,记录下今天遇到的问题。showAsDropDown在7.0后需要适配。
造成此问题的原因是 华为等全面屏在
relayView.getResources().getDisplayMetrics()
获取高度的时候,把通知栏的高度也囊括进来了,找了一天,网上的代码比较过时了,使用后都没什么效果。
修改方案(获取activity的高度后减去控件高度即可):
if (Build.VERSION.SDK_INT < 24) { popupWindow.showAsDropDown(relayView); } else { Rect rect = new Rect(); relayView.getWindowVisibleDisplayFrame(rect); Activity activity = (Activity) relayView.getContext(); Rect outRectReal = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRectReal ); int height = outRectReal .height() - rect.bottom; popupWindow.setHeight(height ); popupWindow.showAsDropDown(relayView); }
在使用showAsDropDown的时候 替换上边代码,即可修复。