我先贴上我的解决方案 再说明下为什么这么做
if(Build.VERSION.SDK_INT>24){
int[] location = new int[2];
anchor.getLocationOnScreen(location);
int y = location[1];
mPopupWindow.showAtLocation(anchor, Gravity.BOTTOM, 0, -(y+anchor.getHeight()));
ViewGroup.MarginLayoutParams m = (ViewGroup.MarginLayoutParams)childVIew.getLayoutParams();
m.bottomMargin = y+view.getHeight();
}else{
mPopupWindow.showAsDropDown(view);
}
首先判断是7.0 以下直接使用 showAsDropDwon 。但是如果是7.0以上 我是通过showAtlocation 来解决的。计算 了anchor 在屏幕的y坐标和它的高度。这样给一个偏移量 刚好能在下面展示,
现在问题来了。我后面拿到了整个布局中的child 设置了个Bottommargin 是为了什么。我发现设置这个以后能在下面显示,但是你发现里面的内容下面缺了一小块。刚好是你偏移的距离。其实就是整个popupwindow 平移了。所以给这个child 设置了一个bottomMargin 刚好就能露出来。 也许有更好的解决办法 ,大家也可以在评论区 指点一二。