设置文本格式

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

以编程方式设置文本显示的格式设置有多种方式。可以直接在 TextField 实例中设置属性,例如,TextFIeld.thicknessTextField.textColorTextField.textHeight 属性。也可以使用 htmlText 属性指定文本字段的内容,并使用受支持的 HTML 标签,如 biu。但是您也可以将 TextFormat 对象应用于包含纯文本的文本字段,或将 StyleSheet 对象应用于包含 htmlText 属性的文本字段。使用 TextFormat 和 StyleSheet 对象可以对整个应用程序的文本外观提供最有力的控制和最佳的一致性。可以定义 TextFormat 或 StyleSheet 对象并将其应用于应用程序中的部分或所有文本字段。

指定文本格式

您可以使用 TextFormat 类设置多个不同的文本显示属性,并将它们应用于 TextField 对象的整个内容或一定范围的文本。

以下示例对整个 TextField 对象应用一个 TextFormat 对象,并对 TextField 对象中一定范围的文本应用另一个 TextFormat 对象:

var tf:TextField = new TextField(); 
tf.text = "Hello Hello"; 
 
var format1:TextFormat = new TextFormat(); 
format1.color = 0xFF0000; 
 
var format2:TextFormat = new TextFormat(); 
format2.font = "Courier"; 
 
tf.setTextFormat(format1); 
var startRange:uint = 6; 
tf.setTextFormat(format2, startRange); 
 
addChild(tf);

TextField.setTextFormat() 方法只影响已显示在文本字段中的文本。如果 TextField 中的内容发生更改,则应用程序可能需要重新调用 TextField.setTextFormat() 方法以便重新应用格式设置。您也可以设置 TextField 的 defaultTextFormat 属性来指定用户输入文本所用的格式。

应用层叠样式表

文本字段可以包含纯文本或 HTML 格式的文本。纯文本存储在实例的 text 属性中,而 HTML 文本存储在 htmlText 属性中。

您可以使用 CSS 样式声明来定义可应用于多种不同文本字段的文本样式。CSS 样式声明可以在应用程序代码中进行创建,也可以在运行时从外部 CSS 文件中加载。

flash.text.StyleSheet 类用于处理 CSS 样式。StyleSheet 类可识别有限的 CSS 属性集合。有关 StyleSheet 类支持的样式属性的详细列表,请参阅“ActionScript 3.0 参考”中的 flash.textStylesheet 条目。

如以下示例所示,您可以在代码中创建 CSS,并使用 StyleSheet 对象对 HTML 文本应用这些样式:

var style:StyleSheet = new StyleSheet(); 
 
var styleObj:Object = new Object(); 
styleObj.fontSize = "bold"; 
styleObj.color = "#FF0000"; 
style.setStyle(".darkRed", styleObj); 
 
var tf:TextField = new TextField(); 
tf.styleSheet = style; 
tf.htmlText = "<span class = 'darkRed'>Red</span> apple"; 
 
addChild(tf);

创建 StyleSheet 对象后,示例代码创建一个简单对象以容纳一组样式声明属性。然后该代码调用 StyleSheet.setStyle() 方法,该方法将名为“.darkred”的新样式添加到样式表中。接着,代码通过将 StyleSheet 对象分配给 TextField styleSheet 属性来应用样式表格式设置。

要使 CSS 样式生效,应在设置 htmlText 属性之前对 TextField 对象应用样式表。

根据设计,带有样式表的文本字段是不可编辑的。如果您有一个输入文本字段并为其分配一个样式表,则该文本字段将显示样式表的属性,但不允许用户在其中输入新的文本。而且,您也无法在分配有样式表的文本字段上使用以下 ActionScript API:

  • TextField.replaceText() 方法

  • TextField.replaceSelectedText() 方法

  • TextField.defaultTextFormat 属性

  • TextField.setTextFormat() 方法

如果某个文本字段已经分配了一个样式表,但后来将 TextField.styleSheet 属性设置为 null,则 TextField.textTextField.htmlText 属性的内容会向它们的内容中添加标签和属性,以结合先前分配的样式表设定的格式。若要保留原始 htmlText 属性,应在将样式表设置为 null 之前将其保存在变量中。

加载外部 CSS 文件

用于设置格式的 CSS 方法的功能更加强大,您可以在运行时从外部文件加载 CSS 信息。当 CSS 数据位于应用程序本身以外时,您可以更改应用程序中的文本的可视样式,而不必更改 ActionScript 3.0 源代码。部署完应用程序后,可以通过更改外部 CSS 文件来更改应用程序的外观,而不必重新部署应用程序 SWF 文件。

StyleSheet.parseCSS() 方法可将包含 CSS 数据的字符串转换为 StyleSheet 对象中的样式声明。以下示例显示如何读取外部 CSS 文件并对 TextField 对象应用其样式声明。

首先,下面是要加载的 CSS 文件(名为 example.css)的内容:

p { 
    font-family: Times New Roman, Times, _serif; 
    font-size: 14; 
} 
 
h1 { 
    font-family: Arial, Helvetica, _sans; 
    font-size: 20; 
    font-weight: bold; 
} 
 
.bluetext { 
    color: #0000CC; 
}    

接下来是加载该 example.css 文件并对 TextField 内容应用样式的类的 ActionScript 代码:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.text.StyleSheet; 
    import flash.text.TextField; 
    import flash.text.TextFieldAutoSize; 
 
    public class CSSFormattingExample extends Sprite 
    { 
        var loader:URLLoader; 
        var field:TextField; 
        var exampleText:String = "<h1>This is a headline</h1>" +  
            "<p>This is a line of text. <span class='bluetext'>" + 
            "This line of text is colored blue.</span></p>"; 
         
        public function CSSFormattingExample():void 
        { 
            field = new TextField(); 
            field.width = 300; 
            field.autoSize = TextFieldAutoSize.LEFT; 
            field.wordWrap = true; 
            addChild(field); 
             
            var req:URLRequest = new URLRequest("example.css"); 
             
            loader = new URLLoader(); 
            loader.addEventListener(Event.COMPLETE, onCSSFileLoaded); 
            loader.load(req); 
        } 
         
        public function onCSSFileLoaded(event:Event):void 
        { 
            var sheet:StyleSheet = new StyleSheet(); 
            sheet.parseCSS(loader.data); 
            field.styleSheet = sheet; 
            field.htmlText = exampleText; 
        } 
    } 
}

加载 CSS 数据后,会执行 onCSSFileLoaded() 方法并调用 StyleSheet.parseCSS() 方法,将样式声明传送给 StyleSheet 对象。

设置文本字段内文本范围的格式

flash.text.TextField 类的一个很有用的方法是 setTextFormat() 方法。使用 setTextFormat(),您可以将特定属性分配给文本字段的部分内容以响应用户输入,例如,需要提醒用户必须输入特定条目的表单,或在用户选择部分文本时提醒用户更改文本字段内文本段落小节的重点的表单。

以下示例对某一范围的字符使用 TextField.setTextFormat(),以在用户单击文此本字段时更改 myTextField 的部分内容的外观:

var myTextField:TextField = new TextField(); 
myTextField.text = "No matter where you click on this text field the TEXT IN ALL CAPS changes format."; 
myTextField.autoSize = TextFieldAutoSize.LEFT; 
addChild(myTextField); 
addEventListener(MouseEvent.CLICK, changeText); 
 
var myformat:TextFormat = new TextFormat(); 
myformat.color = 0xFF0000; 
myformat.size = 18; 
myformat.underline = true; 
 
function changeText(event:MouseEvent):void 
{ 
    myTextField.setTextFormat(myformat, 49, 65); 
}