我们的Flex应用程序会自动调整浏览器窗口的大小,我们很容易解决了一大堆扩展问题,但剩下的就是工具提示。它们显示在屏幕上的错误位置,而不是根据窗口大小正确缩放。由于工具提示是自动定位的,我们如何解决这个问题?
澄清我正在使用内置的flex工具提示。问题不在于,当应用程序显示时,工具提示不会移动。如果我调整应用程序的大小,工具提示现在都会显示在错误的位置,即使其他所有内容都会自动正确更新。
答案 0 :(得分:3)
不确定您是否找到了解决方案,但有一种更简单的方法。此代码在捕获阶段(显示之前)挂钩到tooltip-show事件中,根据包含元素的比例适当地缩放和定位它 - 在“this”情况下,parentApplication
文档。它还包括一些代码,在我的例子中,它有助于防止工具提示在缩放时偏离舞台(因此您可能只需要前几行 - t.scaleX
和t.scaleY
):< / p>
import mx.events.ToolTipEvent;
addEventListener(ToolTipEvent.TOOL_TIP_SHOW, handleToolTipShow, true, 0, true);
private function handleToolTipShow(event:ToolTipEvent):void
{
if (event && event.toolTip)
{
var t:IToolTip = event.toolTip;
// Scale the tip itself
t.scaleX = this.scaleX;
t.scaleY = this.scaleY;
// Scale the offsets
var xOffset:int = 10 * this.scaleX;
var yOffset:int = 10 * this.scaleY;
// Set the default positioning
t.x = parent.mouseX + xOffset;
t.y = parent.mouseY + yOffset;
// Set the adjusted height and width
var th:Number = t.height * this.scaleX;
var tw:Number = t.width * this.scaleY;
var rightEdge:int = t.x + tw + xOffset;
var playerRightEdge:int = parent.width;
var bottomEdge:int = t.y + th + yOffset;
var playerBottomEdge:int = parent.height;
// Offscreen right
if (rightEdge > playerRightEdge)
{
t.move(parent.mouseX - xOffset - tw, parent.mouseY + yOffset);
}
// Offscreen bottom
if (bottomEdge > playerBottomEdge)
{
t.move(parent.mouseX + xOffset, parent.mouseY - yOffset - th);
}
}
}
答案 1 :(得分:0)
我不认为这个问题有一个很好的解决方案,因为ToolTipManager
不知道currentTarget
ToolTip
何时更改了舞台上的位置。修复工具几乎必须进入Flex框架本身。我已经把一些似乎有用的东西混在一起,但它需要对Flex Framework进行monkeypatching。
将mx.managers.ToolTipManager.as
复制到您创建的mx.managers
包中的项目中。
将此方法添加到文件的底部。
public static function positionToolTip() : void {
ToolTipManagerImpl(impl).positionTip();
}
在应用程序的resize事件上调用此方法。
答案 2 :(得分:0)
尝试使用contentToGlobal()
将坐标转换为Global答案 3 :(得分:0)