It used to be pretty easy in the past. You just need to add a EventListener of TextEvent.LINK to the textfield and you can capture the url that the user has click on. But Adobe have made some new improvements to the TLF Textfield and I am going to show you how to capture the URL that the user has clicked, when it comes to TLF Textfield.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="creationCompleteEvent(event)" backgroundColor="#CCCCCC"> <fx:Script> <![CDATA[ import flashx.textLayout.conversion.TextConverter; import flashx.textLayout.elements.LinkElement; import flashx.textLayout.events.FlowElementMouseEvent; import mx.events.FlexEvent; protected function creationCompleteEvent(event:FlexEvent):void { //Populate the Flex 4 TextArea with some contents //Follow with a Listener for clicking on urls. var htmlText:String = "Click <a " + "href='http://nekyouto-tech.blogspot.com/'>" + "here</a> for my blog."; txt.textFlow = TextConverter.importToFlow(htmlText, TextConverter.TEXT_FIELD_HTML_FORMAT); txt.textFlow.addEventListener(FlowElementMouseEvent.CLICK, clickTextURLEvent); //Populate the Flex 3 TextArea with some contents //Follow with a Listener for clicking on urls. htmlText = "Click <a " + "href='event:http://nekyouto-tech.blogspot.com/'>" + "here</a> for my blog."; oldTxt.htmlText = htmlText; oldTxt.addEventListener(TextEvent.LINK, clickTextURLEvent); } //A function that will handle the url request from both //TextArea Components private function clickTextURLEvent(event:Event):void { var url:String; if(event as TextEvent) { url = TextEvent(event).text; }else if(event as FlowElementMouseEvent){ var link:LinkElement; link = FlowElementMouseEvent(event) .flowElement as LinkElement; url = link.href; } navigateToURL(new URLRequest(url), "_blank"); event.stopImmediatePropagation(); event.preventDefault(); } ]]> </fx:Script> <s:layout> <s:VerticalLayout verticalAlign="middle" horizontalAlign="center"/> </s:layout> <s:Label text="Flex 3 Text Area"/> <mx:TextArea id="oldTxt" editable="false" selectable="false"/> <s:Spacer height="10"/> <s:Label text="Flex 4 Text Area"/> <s:TextArea id="txt" editable="false" selectable="false"/> </s:Application>
The result of the above will show a Flex 3 TextArea followed by a Flex 4 TextEvent.
Observe how the codes differ.
* Click here to view the demo of this example.
^ Click here for the source files of this demo.
No comments:
Post a Comment