1、PopupWindow的位置显示问题
项目时发现Popupwindow在7.0及以上的设备上显示位置异常,6.0上及以下却没有问题:
解决方式:调用Popupwindow的showasdrop方法 代码如下
/**
* 适配7.0系统显示弹窗问题
* @param window
* @param parent
* @param offsetY
*/
public static voidadapterApiV24ForShowAsDropDown(PopupWindow window, View parent, int offsetY) {
if (null == window) {
return;
}
if (null == parent) {
return;
}
if(Build.VERSION.SDK_INT >= 24){
Rect visibleFrame = new Rect();
parent.getGlobalVisibleRect(visibleFrame);
int height =parent.getResources().getDisplayMetrics().heightPixels - visibleFrame.bottom
+Math.abs(offsetY);
window.setHeight(height);
}
window.showAsDropDown(parent, 0, offsetY);
}
代码难点解析
parent.getGlobalVisibleRect(visibleFrame);这里主要是获取传入的view 在屏幕上的位置
visibleFrame.bottom就是获取该view在屏幕的y的高度
Math.abs(offsetY) 这个是popupWindow显示的位置y轴的偏移量
int height = parent.getResources().getDisplayMetrics().heightPixels - visibleFrame.bottom + Math.abs(offsetY);这里是算出屏幕分辨率的高度-该view在屏幕上的高度+Y轴偏移量<