需求
点击按钮,在按钮位置出现弹窗,里面是一个菜单列表,给用户选择。
这个按钮是在一个RecycleView里,按钮是跟着滑动的。
菜单里的item个数不是固定的
期望实现的效果是:如果按钮下方够展示菜单列表,就在下方展示,不够展示菜单列表时,可以在按钮上方展示。
实现
采用PopupWindow中放入GridView实现,
PopupWindow和GridView的大小是WrapContent
主要调用PopupWindow的showAsDropDown方法
遇到的问题
下方不足以展示全部菜单时,会把空间占完,然后必须滑动GridView才能看全菜单
Android系统源码上虽然注释的showAsDropDown会在下方不足以展示PopupWindow时自动调整位置,但是实际效果是按钮在屏幕最下方,它就是不会在按钮上方展示(因为上个版本相同的代码就实现了这个效果,所以特别不理解重写的就不行)
问题核心
PopupWindow在计算其大小上,有问题,计算的不准确。网上有很多此类问题的帖子就不贴了。
解决方案
给PopupWindow设置固定的大小。
这个问题在不同的平台上表现不一样。
网友评论