我目前正在嘗試在基於錨點元素的屏幕上動態地定位彈出窗口。出於某種原因,當我定位這個元素時,它在我想要的位置左側出現大約100px。例如,如果我將它放置在靠近屏幕邊緣的錨點上,彈出式窗口應該以右邊緣出現在錨點右邊的左邊。但是,彈出窗口顯示爲與屏幕邊緣齊平。如果我從計算的xPos減去100,那麼它工作正常。在Android中定位彈出窗口
我檢查了我的數學,並通過顯示代碼來檢查值是不是出現錯誤,所以我不知道是什麼導致問題。我只是在android中學習視圖,所以我確定我忽略了一些東西。希望這裏有人會知道!
我已經發布了下面的顯示代碼,如果需要,我會很高興發佈任何其他內容。
在此先感謝!
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);
我通過代碼加強,希望這將有助於獲得一些數字: 屏幕寬度= 1280 XPOS = 765 rootWidth = 485(彈出窗口的視圖的寬度),所以它看起來像我應該有30像素左結束時彈出窗口,但彈出窗口顯示爲與屏幕右邊緣齊平 –