В настоящее время я пытаюсь динамически расположить всплывающее окно на экране на основе элемента привязки.По какой-то причине, когда я размещаю этот элемент, он появляется примерно в 100 пикселях слева от того места, где я его хочу.Например, если я расположу его на якоре рядом с краем экрана, всплывающее окно должно появиться так, чтобы его правый край находился слева от правого края якорей.Тем не менее, всплывающее окно появляется вплотную к краю экрана.Если я вычту 100 из моего расчета xPos, то он работает нормально.
Я проверил свою математику и прошел через код дисплея, чтобы убедиться, что значения не выводятся неправильно, поэтому я не уверен, что является причиной проблемы.Я только изучаю взгляды в 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);