显示文本

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

虽然 Adobe Flash Builder 和 Flash Professional 等创作工具提供了多种用于显示文本的选项(包括与文本相关的组件或文本工具),但是以编程方式显示文本的最简单方法还是通过文本字段。

文本类型

文本字段中文本的类型根据其来源进行划分:

  • 动态文本

    动态文本包含从外部源(例如文本文件、XML 文件以及远程 Web 服务)加载的内容。

  • 输入文本

    输入文本是指用户输入的任何文本或用户可以编辑的动态文本。可以设置样式表来设置输入文本的格式,或使用 flash.text.TextFormat 类为输入内容指定文本字段的属性。有关详细信息,请参阅 捕获文本输入

  • 静态文本

    静态文本只通过 Flash Professional 创建。不能使用 ActionScript 3.0 创建静态文本实例。但是,可以使用 ActionScript 类(例如 StaticText 和 TextSnapshot)来操作现有的静态文本实例。有关详细信息,请参阅 使用静态文本

修改文本字段内容

可通过将字符串分配给 flash.text.TextField.text 属性来定义动态文本。可以直接将字符串赋予该属性,如下所示:

myTextField.text = "Hello World";

还可以为 text 属性赋予在脚本中定义的变量值,如下例所示:

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class TextWithImage extends Sprite 
    { 
        private var myTextBox:TextField = new TextField(); 
        private var myText:String = "Hello World"; 
 
        public function TextWithImage() 
        { 
            addChild(myTextBox); 
            myTextBox.text = myText; 
        } 
    } 
}

或者,可以将一个远程变量的值赋予 text 属性。从远程源加载文本值有三种方式:

  • flash.net.URLLoader 和 flash.net.URLRequest 类可以从本地或远程位置为文本加载变量。

  • FlashVars 属性被嵌入到承载 SWF 文件的 HTML 页中,可以包含文本变量的值。

  • flash.net.SharedObject 类管理值的永久存储。有关详细信息,请参阅 存储本地数据

显示 HTML 文本

flash.text.TextField 类具有一个 htmlText 属性,可使用它将您的文本字符串标识为包含用于设置内容格式的 HTML 标签。如下例所示,必须将您的字符串值赋予 htmlText 属性(而不是 text 属性),以便 Flash Player 或 AIR 将文本呈示为 HTML:

var myText:String = "<p>This is <b>some</b> content to <i>render</i> as <u>HTML</u> text.</p>"; 
myTextBox.htmlText = myText;

Flash Player 和 AIR 支持用于 htmlText 属性的 HTML 标签和实体的一个子集。“ActionScript 3.0 参考”中的 flash.text.TextField.htmlText 属性描述提供了关于支持的 HTML 标记和实体的详细信息。

一旦您使用 htmlText 属性指定了内容,就可以使用样式表或 textformat 标签来管理内容的格式设置。有关详细信息,请参阅 设置文本格式

在文本字段中使用图像

将内容显示为 HTML 文本的另一个好处是可以在文本字段中包括图像。可以使用 img 标签引用一个本地或远程图像,并使其显示在关联的文本字段内。

以下示例将创建一个名为 myTextBox 的文本字段,并在显示的文本中包括一个内容为眼睛的 JPG 图像,该图像与 SWF 文件存储在同一目录下:

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class TextWithImage extends Sprite 
    { 
        private var myTextBox:TextField; 
        private var myText:String = "<p>This is <b>some</b> content to <i>test</i> and <i>see</i></p><p><img src='eye.jpg' width='20' height='20'></p><p>what can be rendered.</p><p>You should see an eye image and some <u>HTML</u> text.</p>"; 
 
        public function TextWithImage() 
        { 
            myTextBox.width = 200; 
            myTextBox.height = 200; 
            myTextBox.multiline = true; 
            myTextBox.wordWrap = true; 
            myTextBox.border = true; 
 
            addChild(myTextBox); 
            myTextBox.htmlText = myText; 
        } 
    } 
}

img 标签支持 JPEG、GIF、PNG 和 SWF 文件。

在文本字段中滚动文本

在许多情况下,文本可能比显示该文本的文本字段长。或者,某个输入字段允许用户输入比字段一次可显示的文本内容更多的文本。您可以使用 flash.text.TextField 类的与滚动相关的属性来管理过长的内容(垂直或水平方向)。

与滚动有关的属性包括 TextField.scrollV TextField.scrollH maxScrollV maxScrollH 。可使用这些属性来响应鼠标单击或按键等事件。

以下示例将创建一个已设置大小的文本字段,其中包含的文本内容超过了该字段一次可以显示的内容。当用户单击文本字段时,文本垂直滚动。

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
    import flash.events.MouseEvent; 
 
    public class TextScrollExample extends Sprite 
    { 
        private var myTextBox:TextField = new TextField(); 
        private var myText:String = "Hello world and welcome to the show. It's really nice to meet you. Take your coat off and stay a while. OK, show is over. Hope you had fun. You can go home now. Don't forget to tip your waiter. There are mints in the bowl by the door. Thank you. Please come again."; 
 
        public function TextScrollExample() 
        { 
            myTextBox.text = myText; 
            myTextBox.width = 200; 
            myTextBox.height = 50; 
            myTextBox.multiline = true; 
            myTextBox.wordWrap = true; 
            myTextBox.background = true; 
            myTextBox.border = true; 
 
            var format:TextFormat = new TextFormat(); 
            format.font = "Verdana"; 
            format.color = 0xFF0000; 
            format.size = 10; 
 
            myTextBox.defaultTextFormat = format; 
            addChild(myTextBox); 
            myTextBox.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownScroll); 
        } 
 
        public function mouseDownScroll(event:MouseEvent):void 
        { 
            myTextBox.scrollV++; 
        } 
    } 
}