【问题标题】:PopupWindow at a specific coordinate with no anchor view特定坐标的 PopupWindow 没有锚视图
【发布时间】:2013-07-06 04:54:55
【问题描述】:

我有一个自定义的 ImageView,在 OnDraw 中我添加了一些位图叠加。我可以使用 OnTouchEvent 回调中的操作向上类型事件来捕获任何叠加层的点击事件。问题是我要显示一个弹出窗口,我必须为弹出窗口提供一个视图锚以显示,但我使用 位图 作为锚 不是 特定视图,所以我被困住了。我在网上找不到有关此问题的任何解决方案。传递父 ImageView 并添加覆盖 x-y 偏移(使用 Gravity.NO_GRAVITY)不会产生所需的结果(窗口箭头也不会正确指向)。

【问题讨论】:

  • 如何显示弹出窗口?
  • 使用showAtLocation(查看父级,int重力,int xOffset,int yOffset);
  • 这应该可以,也许你的偏移量是错误的?

标签: android popupwindow


【解决方案1】:

使用PopupWindow.showAtLocation

问题在于该函数中的 x/y 参数相对于锚视图所属的窗口偏移。你可以从函数的源代码中清楚地看到它,除了它的窗口令牌之外,没有使用来自“父”的任何东西。

public void showAtLocation(View parent, int gravity, int x, int y) {
    showAtLocation(parent.getWindowToken(), gravity, x, y);
}

因此,为了使您的偏移量好,您必须确定锚点相对于其窗口的位置。

为此,请使用

Rect rc = new Rect();
View.getWindowVisibleDisplayFrame(rc);
int[] xy = new int[2];
View.getLocationInWindow(xy);
rc.offset(xy[0], xy[1]);

现在你有

inx x = rc.left, y = rc.top;

这是 ImageView 的左上角相对于其窗口的点。

最后在相对于该点的位置显示您的 PopupWindow,它应该正确显示在您的 ImageView 顶部。

【讨论】:

    【解决方案2】:

    你指的是下面的观点是对的......我建议你按照下面的链接并在你的案例中实施同样的..如果发现困难发表你的评论并会回复你..@ 987654321@

    【讨论】:

    • 由于新用户状态无法发布图片,请参考链接 Marci Căşvan
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多