android - RecyclerView 项目的 PopUpWindow 未正常定位
问题描述
好的,我将尽我所能描述问题。
我有RecyclerView
一堆ViewHolder
物品。
每个ViewHolder
都有一个按钮。
我的目标是PopUpWindow
在我单击的按钮下方显示一个右侧。
我设置了监听器,我 100% 知道我正在触摸我打算触摸的项目。
问题是,当我触摸向下的物品时,RecyclerView
事情变得非常奇怪。
屏幕边界内没有任何东西,所以当我打电话时myPopUp.showAsDropDown(myButton)
,如果我点击的项目是第一个或第二个项目(我有 2 个 ViewHolders 一次占据屏幕),我可以PopUpWindow
正常看到。但是,如果我单击一个不可见的项目,除非我向下滚动,否则PopUpWindow
它会显示但它不在屏幕边界,我有点理解为什么但我不知道如何修复它,这是一个错误?
任何帮助将不胜感激,我希望我很清楚,如果我不是,我会扩展,谢谢!
更新:
我在将 View 项目滚动到中间的屏幕时记录了它的坐标,它就像 1200 y 值,而我的屏幕只有 1400。
所以我想我的问题可以改写为,“我怎样才能确保回收站视图中的查看项目根据它们在屏幕上的位置而不是它们在回收站视图中的位置为我提供准确的绝对坐标?
好的,所以经过更多测试后,我看到当我点击该项目时,它给出了正确的绝对坐标,然后当向上滚动第二个项目现在是第一个(视觉上)我点击它时,它给出了类似的绝对坐标-值,这很好。但是当我滚动到第三个项目时,它给了我该项目的原始 y 值,它比预期的要高。
解决方案
您为弹出窗口传递的视图将决定弹出窗口的位置。现在尝试
myPopUp.showAsDropDown(myButton, x, y)
从位置计算得到 x 和 y:
int[] originalPos = new int[2];
itemView.getLocationOnScreen(originalPos);
//or view.getLocationOnScreen(originalPos)
int x = originalPos[0];
int y = originalPos[1];
推荐阅读
- python - 我的函数和 if 语句似乎不起作用
- iphone - 检测最新的苹果设备 Xs, X(R)
- matlab - 无法在线在matlab中运行ovrpredict
- python - 如何使用reportlab在图像顶部覆盖文本超链接?
- javascript - 如何使用 CSS 重叠三个 div?
- python - 如何将用户的输入限制在一个数字范围内?
- php - php多维数组按其他数组的列排序
- python - 如何用python绘制可读的、最好是交互式的网络图?
- mysql - 来自网关地址而不是源容器的 Docker MySQL 容器传入连接
- perl - 如何使用 perl 脚本静默安装 exe 文件