Apache flex 如何在Flex 3中右对齐工具提示文本
我在表中有一个下拉列表(作为自定义渲染器)。有些选项太长,无法显示在表格或下拉列表中,因为屏幕上存在一些空间限制。但是,我们有一个显示全文的工具提示 问题是这是表中的最后一列,用户的PC也有一些分辨率限制。现在将显示工具提示,其中一部分在用户监视器上被切断 现在我可以去调整工具提示的X位置(按-150)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
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";