1 创建ToolTips

每一个可视化的Flex组件都继承了UIComponent类(它实现了IToolTipManagerClient接口)来支持toolTip属性。这个属性从UIComponent类继承而来。你设置了toolTip的属性为一个文本内容,当鼠标移动到该组件上方的时候,这些文字信息就会被显示。
你也可以在ActionScript中来设置toolTip.
假如你没有在一个容器中定义ToolTip, 则容器的子组件将显示容器的ToolTip。举个例子,比如你添加了一个button到一个Panel容器中,而这个容器包含了一个ToolTip,当鼠标移动到这个Panel时用户将看到这个Panel 容器的ToolTip内容。当用户移动鼠标指针到这个button控件时候,Panel容器的ToolTip将继续显示。当然你可以通过设置button的ToolTip的属性值来重写容器Panel的ToolTip 内容。
TabNavigator容器却在它的子(children)上使用ToolTip。假如你添加ToolTip到TabNavigator的一个子版面中,当鼠标移动到那个版面的tab的上方的时候,ToolTip将被显示出来,而不是鼠标移动到那个版面本身上的时候显示ToolTip信息。假如你添加了ToolTip到TabNavigator容器中,除非ToolTip在那个版面被重写否则不可能当鼠标移动到tab或者版面上都显示ToolTip信息。同样在以下的控件中也是类似的效果。
Accordion
ButtonBar
LinkBar
TabBar
ToggleButtonBar

2 设置ToolTip风格


你可以通过CSS语法或者mx.style.StyleManager类来改变ToolTip的内容和外框(Box)的显示风格。默认的风格设置定义在framework.swc文件中的default.css的文件中。

Java代码 收藏代码
  1. <mx:Style>

  2. ToolTip {

  3. fontFamily: "Arial";

  4. fontSize: 19;

  5. fontStyle: "italic";

  6. color: #FF6699;

  7. backgroundColor: #33CC99;

  8. }

  9. </mx:Style>



要使用StyleManager类来设置ToolTip风格,要使用setStyle()这个函数,比如:
Java代码 收藏代码
  1. private function setToolTipStyle():void {

  2. StyleManager.getStyleDeclaration("ToolTip").setStyle("fontStyle","italic");

  3. StyleManager.getStyleDeclaration("ToolTip").setStyle("fontSize","19");

  4. StyleManager.getStyleDeclaration("ToolTip").setStyle("fontFamily","Arial");

  5. StyleManager.getStyleDeclaration("ToolTip").setStyle("color","#FF6699");

  6. StyleManager.getStyleDeclaration("ToolTip").setStyle("backgroundColor","#33CC99");

  7. }



ToolTip使用可继承的全局的styles。比如你通过StyleManager在全局的选择器上(global selector)设置了ToolTip的fontWeight属性:
Java代码 收藏代码
  1. private function setToolTipStyle():void {

  2. StyleManager.getStyleDeclaration("global").setStyle("fontWeight","bold");

  3. }



3 ToolTip事件的使用


在ToolTip的生命周期中会触发很多事件,这些事件都是ToolTipEvent类型的。

除了type和target两个属性外,ToolTipEvent对象涉及到了toolTip属性。利用这个属性,就可以通过text属性拿到ToolTip里面的文本内容值。

Java代码 收藏代码
  1. <?xml version="1.0"?>

  2. <!-- tooltips/ToolTipsWithSoundEffects.mxml -->

  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()">

  4. <mx:Script>

  5. <![CDATA[

  6. import mx.events.ToolTipEvent;

  7. import flash.media.Sound;

  8. [Embed(source="../assets/sound1.mp3")]

  9. private var beepSound:Class;

  10. private var myClip:Sound;

  11. public function playSound():void {

  12. myClip.play();

  13. }

  14. private function myListener(event:ToolTipEvent):void {

  15. playSound();

  16. }

  17. private function init():void {

  18. myLabel.addEventListener(ToolTipEvent.TOOL_TIP_SHOW,

  19. myListener);

  20. myClip = new beepSound();

  21. }

  22. ]]>

  23. </mx:Script>

  24. <mx:Label id="myLabel" toolTip="ToolTip" text="Mouse Over Me"/>

  25. </mx:Application>





4 使用ToolTip 管理器


使用ToolTipManager管理器类能够让你设置基本的ToolTip功能。比如显示延迟,以及控制是否显示ToolTip信息内容。
你可以在程序中激活和停止使用ToolTips. 可以使用enabled这个属性来激活或者停止使用ToolTips,如果停止使用,在鼠标移到到组件上方的时候就不会用ToolTips的框显示出来,不管那个组件是否设置了toolTip这个属性值。
Java代码 收藏代码
  1. if (ToolTipManager.enabled) {

  2. ToolTipManager.enabled = false;

  3. } else {

  4. ToolTipManager.enabled = true;

  5. }



延迟时间是来来衡量某一时间发生前所消耗的时间。比如,在用户移动鼠标指针到组件的上方,在ToolTip显示之前有一个简短的延迟。这就给那些不想看到ToolTip内容的用户足够的时间,在看到ToolTip信息之前把鼠标移开。

ToolTipManager 可以允许你设置这个ToolTip显示延迟的时间的长度,以及ToolTip在屏幕上显示的事件长度。你还可以设置ToolTips之间的延迟时间。

你可以在ActionScript的代码块中设置ToolTipManager的这些属性值:showDealy,hideDelay和scrubDelay。具体的功能描述请参考官方的develop guide。以下是一个例子利用Application k控制的初始化方法来设置ToolTip的初始值。

Java代码 收藏代码
  1. private function initApp():void {

  2. ToolTipManager.enabled = true;// Optional. Default value is true.

  3. ToolTipManager.showDelay = 0;// Display immediately.

  4. ToolTipManager.hideDelay = 3000; // Hide after 3 seconds of being viewed.

  5. }



你可以使用自定义的视觉效果或者标准的Flex效果。你可以设置ToolTipManager的showEffect或者hideEffect属性值来定义当ToolTip显示或者隐藏是所触发的效果。

以下就是使用退出(Fade)的效果:
Java代码 收藏代码
  1. <?xml version="1.0"?>

  2. <!-- tooltips/FadeInToolTips.mxml -->

  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="600" height="600"

  4. initialize="app_init();">

  5. <mx:Script><![CDATA[

  6. import mx.managers.ToolTipManager;

  7. public function app_init():void {

  8. ToolTipManager.showEffect = fadeIn;

  9. }

  10. ]]></mx:Script>

  11. <mx:Fade id="fadeIn" alphaFrom="0" alphaTo="1" duration="1000"/>

  12. <mx:Button id="b1" label="Click Me" toolTip="This is a ToolTip that fades in."/>

  13. </mx:Application>



你不仅可是使用ToolTips静态的显示文本信息的功能,还可以使用ToolTips动态的绑定组件中的内容来动态显示ToolTips信息。这样可以让你ToolTips成为用户界面的一部分。给用户给多的个性化的体验。

你可以使用{}绑定ToolTips的值到另外一个组件的文本内容。以下的例子就是插入TextInput控件的文本值到按钮控件的ToolTips值。

Java代码 收藏代码
  1. <?xml version="1.0"?>

  2. <!-- tooltips/BoundToolTipText.mxml -->

  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

  4. <mx:TextInput id="txtTo" width="300"/>

  5. <mx:Button label="Send" toolTip="Send e-mail to {txtTo.text}"/>

  6. </mx:Application>



另外一个方法就是获取ToolTips的toolTipShow事件处理来改变text属性值。以下就是一个通过myToolTipChanger方法来监听按钮控件的toolTipShow事件,然后在这个方法内修改了ToolTipManager.currentToolTip.text属性。这个属性值在运行前是未知的。

Java代码 收藏代码
  1. <?xml version="1.0"?>

  2. <!-- tooltips/DynamicToolTipText.mxml -->

  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="initApp()">

  4. <mx:Script><![CDATA[

  5. import mx.managers.ToolTipManager;

  6. import mx.controls.ToolTip;

  7. import mx.events.ToolTipEvent;

  8. public function initApp():void {

  9. b1.addEventListener(ToolTipEvent.TOOL_TIP_SHOW, myToolTipChanger)

  10. }

  11. public function myToolTipChanger(event:ToolTipEvent):void {

  12. // Pass the value of myName in to your application in some way.

  13. // For example, as a flashVar variable.

  14. ToolTipManager.currentToolTip.text = "Click the button, " +

  15. Application.application.parameters.myName;

  16. }

  17. ]]>

  18. </mx:Script>

  19. <mx:Button id="b1" label="Click Me" toolTip="Click the button."/>

  20. </mx:Application>



ToolTipmanger 有两个方法可以让你自定义ToolTips。这两个方法是createToolTip()和destoryToolTip()。即用来创建和销毁ToolTips对象。当你创建一个ToolTip对象,你可以自定义它的显示效果,类型,事件等。
createToolTip()方法有以下的一些参数:

Java代码 收藏代码
  1. createToolTip(text:String, x:Number, y:Number, errorTipBorderStyle:String, context:IUIComponent):IToolTip



你可以使用destroyTollTip()方法来销毁之前指定的ToolTip对象。该方法:
Java代码 收藏代码
  1. destroyToolTip(toolTip:IToolTip):void



Java代码 收藏代码
  1. <?xml version="1.0"?>

  2. <!-- tooltips/CreatingToolTips.mxml -->

  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

  4. <mx:Script><![CDATA[

  5. import mx.managers.ToolTipManager;

  6. import mx.controls.ToolTip;

  7. public var myTip:ToolTip;

  8. private function createBigTip():void {

  9. var s:String = "These buttons let you save, exit, or continue with the current

  10. operation."

  11. myTip = ToolTipManager.createToolTip(s,10,10) as ToolTip;

  12. myTip.setStyle("backgroundColor",0xFFCC00);

  13. myTip.width = 150;

  14. myTip.height = 200;

  15. }

  16. private function destroyBigTip():void {

  17. ToolTipManager.destroyToolTip(myTip);

  18. }

  19. ]]></mx:Script>

  20. <mx:Style>

  21. Panel {

  22. paddingLeft: 5;

  23. paddingRight: 5;

  24. paddingTop: 5;

  25. paddingBottom: 5;

  26. }

  27. </mx:Style>

  28. <mx:Panel title="ToolTips" rollOver="createBigTip()" rollOut="destroyBigTip()">

  29. <mx:Button label="OK" toolTip="Save your changes and exit."/>

  30. <mx:Button label="Apply" toolTip="Apply changes and continue."/>

  31. <mx:Button label="Cancel" toolTip="Cancel and exit."/>

  32. </mx:Panel>

  33. </mx:Application>




当然你也可以通过扩展已存在的控件并且实现IToolTip接口来实现自定义的ToolTip,比如Panel 或者VBox容器等。

Java代码 收藏代码
  1. <?xml version="1.0"?>

  2. <!-- tooltips/ToolTipComponents/PanelToolTip.mxml -->

  3. <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml"

  4. implements="mx.core.IToolTip"

  5. width="200"

  6. alpha=".8"

  7. borderThickness="2"

  8. backgroundColor="0xCCCCCC"

  9. dropShadowEnabled="true"

  10. borderColor="black"

  11. borderStyle="solid"

  12. title="feh"

  13. >

  14. <mx:Script><![CDATA[

  15. [Bindable]

  16. public var bodyText:String = "";

  17. // Implement required methods of the IToolTip interface; these

  18. // methods are not used in this example, though.

  19. public var _text:String;

  20. public function get text():String {

  21. return _text

  22. }

  23. public function set text(value:String):void {

  24. }

  25. ]]></mx:Script>

  26. <mx:Text text="{bodyText}" percentWidth="100"/>

  27. </mx:Panel>




5 使用Error Tips


Error tips是ToolTip类的一个实例。它可以从errorTip类选择器来获得styles. 他们经常出现在Flex的验证机制中用来显示警告信息。但是你也可以利用errorTip的style定义来创建自己的验证警告机制。

Error tips的风格定义在default.css这个文件中。它指定了以下默认的设置:

Java代码 收藏代码
  1. .errorTip { color: #FFFFFF;

  2. fontSize: 9;

  3. fontWeight: "bold";

  4. shadowColor: #000000;

  5. borderColor: #CE2929;

  6. borderStyle: "errorTipRight";

  7. paddingBottom: 4;

  8. paddingLeft: 4;

  9. paddingRight: 4;

  10. paddingTop: 4;

  11. }



你可以重写这些sytle来建立自己的定义的error tips显示风格。
Java代码 收藏代码
  1. <?xml version="1.0"?>

  2. <!-- tooltips/ErrorTipStyle.mxml -->

  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" verticalGap="20">

  4. <mx:Script><![CDATA[

  5. import mx.controls.ToolTip;

  6. import mx.managers.ToolTipManager;

  7. private var errorTip:ToolTip;

  8. private var myError:String;

  9. private function validateEntry(type:String, event:Object):void {

  10. if (errorTip) {

  11. resetApp();

  12. }

  13. // NOTE: Validation logic would go here.

  14. switch(type) {

  15. case"ssn":

  16. myError="Use SSN format (NNN-NN-NNNN)";

  17. break;

  18. case"phone":

  19. myError="Use phone format (NNN-NNN-NNNN)";

  20. break;

  21. }

  22. // Use the target's x and y positions to set position of error tip.

  23. trace("event.currentTarget.width" + event.currentTarget.width);

  24. trace("event.currentTarget.x" + event.currentTarget.x);

  25. errorTip = ToolTipManager.createToolTip(

  26. myError, event.currentTarget.x + event.currentTarget.width,

  27. event.currentTarget.y) as ToolTip;

  28. // Apply the errorTip class selector.

  29. errorTip.setStyle("styleName", "errorTip");

  30. }

  31. private function resetApp():void {

  32. if (errorTip) {

  33. ToolTipManager.destroyToolTip(errorTip);

  34. errorTip = null;

  35. }

  36. }

  37. ]]></mx:Script>

  38. <mx:TextInput id="ssn" enter="validateEntry('ssn',event)"/>

  39. <mx:TextInput id="phone" enter="validateEntry('phone',event)"/>

  40. <mx:Label text="Press the enter key after entering text in each text input."/>

  41. <mx:Button id="b1" label="Reset" click="resetApp()"/>

  42. </mx:Application>



另外一种使用error tips的方法就是设置errorString属性。它会调用ToolTipManager创建一个ToolTip实例并且吧errorTip的风格运用到那个ToolTip中而不需要添加额外的代码。

Java代码 收藏代码
  1. <?xml version="1.0"?>

  2. <!-- tooltips/ErrorString.mxml -->

  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" verticalGap="20">

  4. <mx:Script>

  5. <![CDATA[

  6. import mx.controls.ToolTip;

  7. import mx.managers.ToolTipManager;

  8. private var errorTip:ToolTip;

  9. private var myError:String;

  10. private function validateEntry(type:String, event:Object):void {

  11. // NOTE: Validation logic would go here.

  12. switch(type) {

  13. case"ssn":

  14. myError="Use SSN format";

  15. break;

  16. case"phone":

  17. myError="Use phone format";

  18. break;

  19. }

  20. event.currentTarget.errorString = myError;

  21. }

  22. ]]>

  23. </mx:Script>

  24. <mx:TextInput id="ssn" enter="validateEntry('ssn',event)"/>

  25. <mx:TextInput id="phone" enter="validateEntry('phone',event)"/>

  26. </mx:Application>




当调用createToolTip()方法时你还可以通过指定errorTipBorderStyle的属性值来制定ToolTipManger所创建的error tip。

Java代码 收藏代码
  1. <?xml version="1.0"?>

  2. <!-- tooltips/CreatingErrorTips.mxml -->

  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

  4. <mx:Script>

  5. <![CDATA[

  6. import mx.managers.ToolTipManager;

  7. import mx.controls.ToolTip;

  8. public var myTip:ToolTip;

  9. private function createBigTip(event:Event):void {

  10. var myError:String = "These buttons let you save, exit, or continue with the currentoperation.";

  11. // By setting the fourth argument to a non-null value,

  12. // this ToolTip is created as an error tip.

  13. myTip = ToolTipManager.createToolTip(

  14. myError,

  15. event.currentTarget.x + event.currentTarget.width,

  16. event.currentTarget.y,

  17. "errorTipRight"

  18. ) as ToolTip;

  19. }

  20. private function destroyBigTip():void {

  21. ToolTipManager.destroyToolTip(myTip);

  22. }

  23. ]]>

  24. </mx:Script>

  25. <mx:Style>

  26. Panel {

  27. paddingLeft: 5;

  28. paddingRight: 5;

  29. paddingTop: 5;

  30. paddingBottom: 5;

  31. }

  32. </mx:Style>

  33. <mx:Panel title="ToolTips" rollOver="createBigTip(event)" rollOut="destroyBigTip()">

  34. <mx:Button label="OK" toolTip="Save your changes and exit."/>

  35. <mx:Button label="Apply" toolTip="Apply changes and continue."/>

  36. <mx:Button label="Cancel" toolTip="Cancel and exit."/>

  37. </mx:Panel>

  38. </mx:Application>