项目中适配7.0遇到一个这样的bug,如图
正常情况下,popuwindow应该显示在标题下面,也就是红色部分的popuwindow,但是在7.0上显示的确实绿色部分,显示在状态栏下面了,代码中设置popuwindow显示位置是这样设置的
popupWindow.showAsDropDown(titleView);
这个titleView就是标题,即表示显示在标题下面,7.0以下没有问题,之后在stackOverflow上看到了这篇文章Android Nougat PopupWindow showAsDropDown(…) Gravity not working,才知道这是7.0的bug,google在以后的版本中会修复,但是目前的解决方法只能去判断手机系统版本
if (android.os.Build.VERSION.SDK_INT >=24) {
int[] a ={30,30};
titleView.getLocationInWindow(a);
popupWindow.showAtLocation(((Activity) mContext).getWindow().getDecorView(), Gravity.NO_GRAVITY, 0 , a[1]+titleView.getHeight());
} else{
popupWindow.showAsDropDown(titleView);
}
这段代码可以直接复制,替换掉titleView就行,代码中int数组里面的两个值,是必须要的,填写什么似乎没影响效果,测试输入30,80;30,30;80,30;80,80;效果都一样,但必须填写。
做了这个判断以后,就能正常显示了。