先说说出现问题,在7.0以上,我们会发现一个问题。当使用showAsDropDown方法,将PopupWindow显示在某控件下方的时候,会出现位置错位的问题,PopupWindow的起始点跑到了屏幕顶部。如图所示:
分析:出现的原因是因为,在Android7.0以后,PopupWindow的显示会有一个判断,当PopupWindow的高度大于屏幕的剩余高度时,会往控件上方超出。因为这边给PopupWindow设置的高度是
所以,PopupWindow会起始点会跑到了屏幕顶部。
知道了原因,解决方案就简单了,我们只需要动态算出屏幕的剩余高度,赋值成PopupWindow的高度即可完美解决这个问题。
以下两种写法都可以:
一:
二:
如下图,完美解决