3

我们的 Flex 应用程序会随着浏览器窗口自动调整大小,我们已经非常轻松地解决了一大堆缩放问题,但剩下的一个是工具提示。它们显示在屏幕上的错误位置,未根据窗口大小正确缩放。由于工具提示是自动定位的,我们如何解决这个问题?

为了澄清我正在使用内置的 flex 工具提示。问题不在于工具提示在显示时不会随着应用程序调整大小而移动。如果我调整应用程序的大小,工具提示现在将全部显示在错误的位置,即使其他所有内容都会自动正确更新。

4

4 回答 4

3

不确定您是否找到了解决方案,但有一种更简单的方法。此代码在捕获阶段(在它显示之前)挂钩到 tooltip-show 事件,以根据包含元素的比例适当地缩放和定位它——在“这种”情况下是parentApplication文档。它还包括一些代码,就我而言,这些代码有助于防止工具提示在缩放时偏离舞台(因此您可能只需要前几行 -t.scaleXt.scaleY):

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);
        }
    }
}
于 2008-12-31T18:52:06.597 回答
0

尝试使用 contentToGlobal() 将坐标转换为 Global

于 2009-06-17T06:46:34.377 回答
0

我认为这个问题没有很好的解决方案,因为ToolTipManager不知道currentTargetfor a何时ToolTip更改舞台上的位置。修复几乎必须进入 Flex 框架本身。我已经将一些似乎可行但需要对 Flex 框架进行猴子修补的东西组合在一起。

  1. 复制mx.managers.ToolTipManager.as到您mx.managers创建的包中的项目中。

  2. 将此方法添加到文件的底部。

    public static function positionToolTip() : void {
        ToolTipManagerImpl(impl).positionTip();
    }
    
  3. 在应用程序的调整大小事件上调用此方法。

于 2008-12-20T05:11:26.200 回答
0

http://strutsforflex.blogspot.com/2008/03/how-to-set-custom-tooltipmanager.html 更简单

于 2009-12-29T03:50:51.893 回答