Apache flex 如何在Flex 3中右对齐工具提示文本

Apache flex 如何在Flex 3中右对齐工具提示文本,apache-flex,flex3,alignment,tooltip,Apache Flex,Flex3,Alignment,Tooltip,我在表中有一个下拉列表(作为自定义渲染器)。有些选项太长,无法显示在表格或下拉列表中,因为屏幕上存在一些空间限制。但是,我们有一个显示全文的工具提示 问题是这是表中的最后一列,用户的PC也有一些分辨率限制。现在将显示工具提示,其中一部分在用户监视器上被切断 现在我可以去调整工具提示的X位置(按-150) private function createToolTip(event:ListEvent):void { tip = ToolTipManager.createT

我在表中有一个下拉列表(作为自定义渲染器)。有些选项太长,无法显示在表格或下拉列表中,因为屏幕上存在一些空间限制。但是,我们有一个显示全文的工具提示

问题是这是表中的最后一列,用户的PC也有一些分辨率限制。现在将显示工具提示,其中一部分在用户监视器上被切断

现在我可以去调整工具提示的X位置(按-150)

private function createToolTip(event:ListEvent):void {          
    tip = ToolTipManager.createToolTip("THE TEXT", this.parentApplication.mouseX - 150, this.parentApplication.mouseY) as ToolTip;                  
}

这是意料之中的事情,但是如果文本很短,它就在没有的地方消散。

因此,我在工具提示中添加了一个宽度(200)

private function createToolTip(event:ListEvent):void {          
     tip = ToolTipManager.createToolTip("THE TEXT", this.parentApplication.mouseX - 150, this.parentApplication.mouseY) as ToolTip;
     tip.width = 200;                   
}
现在显示ok,文本至少显示在下拉列表旁边

但问题是,只要数据库中存储的文本长度超过200,它就不会显示全文


有人知道如何让工具提示右对齐而不是左对齐吗。这样,无论文本有多长,它都将显示在左侧。

这里有一个解决方案,它实现了具有右对齐的单行和多行工具提示

要做到这一点,您应该执行两个步骤:创建自己的Tooltip类并让TooltipManager使用它

//Tooltip.as

package com.tooltip
{
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import mx.controls.ToolTip;

public class MyToolTip extends ToolTip
{
    public var align:String = "left"; //left or right

    public function MyToolTip()
    {
        super();
    }

    override protected function commitProperties():void
    {
        super.commitProperties();
    }

    override protected function measure():void
    {
        super.measure();

        var tf:TextFormat = textField.getTextFormat();

        if (align == "right")
            tf.align = TextFormatAlign.RIGHT
        else
            tf.align = TextFormatAlign.LEFT;

        textField.setTextFormat(tf);
    }

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        super.updateDisplayList(unscaledWidth, unscaledHeight);

        textField.autoSize = TextFieldAutoSize.NONE;
        textField.width = this.width - 2*textField.x;
    }
}
}
第二步并不简单

TooltipManager有一个属性“toolTipClass”,它表示应该使用哪个类来创建工具提示

ToolTipManager.toolTipClass = MyToolTip;
SDK中存在错误,导致无法正确实现。网络上经常讨论这个问题

创建新的工具提示时,不会考虑“toolTipClass”。相应的代码行如下所示:

var toolTip:ToolTip = new ToolTip();
但应该是这样的:

var toolTip:IToolTip = new ToolTipManager.toolTipClass();
纠正此行为的唯一方法是对ToolTimManagerImpl类进行monkey修补。它被描述得非常好

现在,您可以在应用程序中使用工具提示:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
xmlns:mx="http://www.adobe.com/2006/mxml" 
layout="absolute" 
minWidth="955" minHeight="600" >
<mx:Script>
    <![CDATA[
        import com.tooltip.MyToolTip;
        import mx.controls.ToolTip;
        import mx.managers.ToolTipManager;

        private const TOOLTIP_WIDTH:int = 200;

        protected function onBtnClick(event:MouseEvent):void
        {
            ToolTipManager.toolTipClass = MyToolTip;
            ToolTip.maxWidth = TOOLTIP_WIDTH;

            var tip:MyToolTip;

            tip = ToolTipManager.createToolTip("Your text", this.mouseX - 150, this.mouseY) as MyToolTip;

            tip.align = "right";
            tip.width = TOOLTIP_WIDTH;  
        }

    ]]>
</mx:Script>

<mx:Button id="myBtn" x="194" y="145" label="Show Tooltip" click="onBtnClick(event)"/>
</mx:Application>
这段代码中的行顺序也很重要

我希望它能帮助你

//编辑


您可以找到ToolTimManagerImpl的修补版本。将其放入项目的根目录中。软件包名称与SDK中的名称相同,因此系统将采用此名称。

如果文本不是多行的,您是否可以?我只有一个解决这个问题的办法,那太好了。我们现在的问题是。。。事实上,这些工具提示是数据库驱动的,并且可能很长。虽然现在的不是。如果它是多行的,那么数据库描述可以尽可能长。如果你能和我分享,我会很高兴的?有一个好消息,我知道了!请稍等。我已经在回答的末尾发布了组件的补丁版本。
tip.align = "left";