TextField的htmlText属性中img标签的有趣现象

Flash的文字栏位(TextField)除了用来显示与输入一般文字之外
也有支持简单的HTML标签
像是<font>, <b>, <i>, <u>, <a>, <p>, <br>, <li>, <span>, <img> 
其中比较特别的是<img>,除了可以用来表现外部图片以外
还可以通过src指定Linkage Identifier的方式
呈现Library内的MovieClip 

Linkage Identifier已经是AS2时代的旧名称了
转换为AS3的说法就是Class Name 
意思就是可以用指定htmlText的方式
直接在TextField内产生继承DisplayObject的Sprite, MovieClip, SimpleButton 
甚至是另一个TextField实体

以下便是用AS3在TextField内,再创建另一个TextField 

 程序代码
package { 
  import flash.display.MovieClip; 
  import flash.text.TextField; 

  [SWF(width="300", height="200", backgroundColor="#FFFFFF")] 
  public class main extends MovieClip { 
   public function main() { 
    var outerTxt:TextField = new TextField(); 
    outerTxt.border = true; 
    outerTxt.x = 100; 
    outerTxt.y = 50; 
    this.addChild(outerTxt); 
   
    outerTxt.htmlText = "Outer TextField<img id='txt' src='flash.text.TextField' width='80' height='50' />"; 
    var innerTxt:TextField = outerTxt.getImageReference('txt') as TextField; 
    innerTxt.border = true; 
    innerTxt.text = "Inner TextField"; 
   } 
  } 

// Ticore's Blog -  http://ticore.blogspot.com/


很有趣吧,一般使用情况下TextField内是无法再放其它DisplayObject的

可是TextField.htmlText却有一个问题
假如<img>标签前后没有其它文字,img会建立失败
如以下AS3程序: 

 程序代码
package { 
  import flash.display.MovieClip; 
  import flash.text.TextField; 
  import flash.text.TextFormat; 

  [SWF(width="300", height="200", backgroundColor="#FFFFFF")] 
  public class main extends MovieClip { 
   public function main() { 
    var txt:TextField = new TextField(); 
    txt.border = true; 
    txt.x = 100; 
    txt.y = 50; 
    this.addChild(txt); 
   
    txt.htmlText = "<img id='img' src='flash.display.Sprite' />"; 
    trace(txt.getImageReference('img')); // null 
   
    txt.htmlText = " " "<img id='img' src='flash.display.Sprite' />"; 
    trace(txt.getImageReference('img')); // [object Sprite] 
   } 
  } 

// Ticore's Blog -  http://ticore.blogspot.com/

你可能感兴趣的:(textfield)