我目前正试图根据锚点元素动态定位弹出窗口在屏幕上的位置。但出现了一个问题,当我定位这个元素时,它出现在离我想要的位置左边大约100像素。例如,如果我将弹出窗口定位在靠近屏幕边缘的锚点上,则应该使其右边缘刚好出现在锚点右边缘的左侧。然而,弹出窗口却出现在屏幕的边缘。如果我从计算xPos中减去100,则可以解决这个问题。
我已经检查过我的数学计算,并逐步检查显示代码以检查值是否不正确,所以我不确定是什么原因导致了问题。不过,我正在学习安卓中的视图,所以我肯定忽略了一些东西。希望这里有人能知道怎么解决!
我在下面发布了显示代码,如果需要,我很乐意发布其他任何内容。
先谢谢您了!
int[] location = new int[2];
this.anchor.getLocationOnScreen(location);
Rect anchorRect =
new Rect(location[0], location[1], location[0] + this.anchor.getWidth(), location[1]
+ this.anchor.getHeight());
this.anchorRectangle = anchorRect;
this.root.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
this.root.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int rootWidth = this.root.getMeasuredWidth();
int rootHeight = this.root.getMeasuredHeight();
int screenWidth = this.windowManager.getDefaultDisplay().getWidth();
int xPos, yPos;
// Align popup with right side if the root is wider than anchor
// Align with left otherwise
if (rootWidth > anchorRect.right - anchorRect.left) {
xPos = anchorRect.right - rootWidth;
} else {
xPos = anchorRect.left + 15;
}
// Correct for spilling off the edge
if (xPos + rootWidth > screenWidth)
xPos = screenWidth - rootWidth - 20;
// xPos = ((screenWidth - rootWidth) / 2) + xOffset;
yPos = anchorRect.top - rootHeight + yOffset;
this.rootRectangle = new Rect(xPos, yPos, xPos + rootWidth, yPos + rootHeight);
boolean onTop = true;
// display on bottom
if(rootHeight > anchorRect.top) {
onTop = false;
yPos = anchorRect.bottom + yOffset;
this.window.setAnimationStyle(R.anim.grow_from_top);
}
this.window.showAtLocation(this.anchor, Gravity.NO_GRAVITY, xPos, yPos);