flash.text
public dynamic class StyleSheet
继承StyleSheet Inheritance EventDispatcher Inheritance Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

使用 StyleSheet 类可以创建包含文本格式设置规则(例如,字体大小、颜色和其它格式样式)的 StyleSheet 对象。然后,可以将样式表定义的样式应用到包含 HTML 或 XML 格式文本的 TextField 对象。根据 StyleSheet 对象定义的标签样式自动设置 TextField 对象中文本的格式。可以使用文本样式来定义新的格式标签,重新定义内置的 HTML 标签,或创建可应用到某些 HTML 标签的样式类。

若要对一个 TextField 对象应用样式,请将该 StyleSheet 对象赋给 TextField 对象的 styleSheet 属性。

注意:具有样式表的文本字段不可编辑。也就是说,type 属性设置为 TextFieldType.INPUT 的文本字段会对文本字段的默认文本应用样式表,但用户不再能编辑该内容。考虑使用 TextFormat 类将样式分配给输入文本字段。

Flash Player 支持原 CSS1 规范 (www.w3.org/TR/REC-CSS1) 中的部分属性。下表显示受支持的层叠样式表 (CSS) 属性和值,及其相应的 ActionScript 属性名称。(每个 ActionScript 属性名称都是从对应的 CSS 属性名称派生的;如果名称中包含连字符,请省略连字符并将连字符后的字符变成大写。)

CSS 属性ActionScript 属性用法和支持的值
color color 只支持十六进制颜色值。不支持具有指定名称的颜色(例如 blue)。颜色以下面的格式写入:#FF0000
display display 受支持的值为 inlineblocknone
font-family fontFamily 用逗号分隔的供使用字体的列表,根据需要按降序排列。可以使用任何字体系列名称。如果您指定通用字体名称,它将转换为相应的设备字体。支持以下字体转换:mono 转换为 _typewritersans-serif 转换为 _sansserif 转换为 _serif
font-size fontSize 只使用该值的数字部分。不分析单位(px、pt);像素和磅是等价的。
font-style fontStyle 可识别的值为 normalitalic
font-weight fontWeight 可识别的值为 normalbold
kerning kerning 可识别的值为 truefalse。仅嵌入字体支持字距调整。某些字体(如 Courier New)不支持字距调整。只有 Windows 中创建的 SWF 文件支持 kerning 属性,而 Macintosh 中创建的 SWF 文件不支持该属性。但是,这些 SWF 文件可以在 Flash Player 的非 Windows 版本中播放,并且仍可以应用字距调整。
leading leading 两行之间统一分布的距离。该值指定在每行之后添加的像素数。负值将压缩两行之间的距离。只使用该值的数字部分。不分析单位(px、pt);像素和磅是等价的。
letter-spacing letterSpacing 两个字符之间统一分布的距离。该值指定在每个字符之后添加的像素数。负值将压缩两个字符之间的距离。只使用该值的数字部分。不分析单位(px、pt);像素和磅是等价的。
margin-left marginLeft 只使用该值的数字部分。不分析单位(px、pt);像素和磅是等价的。
margin-right marginRight 只使用该值的数字部分。不分析单位(px、pt);像素和磅是等价的。
text-align textAlign 可识别的值为 leftcenterrightjustify
text-decoration textDecoration 可识别的值为 noneunderline
text-indent textIndent 只使用该值的数字部分。不分析单位(px、pt);像素和磅是等价的。

可以使用 StyleSheet 类执行低级文本呈现。但是,在 Flex 中,您通常使用 Label、Text、TextArea 和 TextInput 控件来处理文本。

查看示例

另请参见

flash.text.TextField


公共属性
 属性定义方
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
  styleNames : Array
[只读 (read-only)] 一个数组,其中包含此样式表中注册的所有样式的名称(字符串形式)。
StyleSheet
公共方法
 方法定义方
  
创建新的 StyleSheet 对象。
StyleSheet
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
EventDispatcher
  
从样式表对象中删除所有样式。
StyleSheet
 Inherited
将事件调度到事件流中。
EventDispatcher
  
返回与名为 styleName 的样式相关联的样式对象的一个副本。
StyleSheet
 Inherited
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
EventDispatcher
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
  
分析 CSSText 中的 CSS 并用它加载样式表。
StyleSheet
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
EventDispatcher
 Inherited
设置循环操作动态属性的可用性。
Object
  
setStyle(styleName:String, styleObject:Object):void
将具有指定名称的新样式添加到样式表对象中。
StyleSheet
 Inherited
返回指定对象的字符串表示形式。
Object
  
扩展 CSS 分析功能。
StyleSheet
 Inherited
返回指定对象的原始值。
Object
 Inherited
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
EventDispatcher
事件
 事件 摘要 定义方
 Inherited[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
 Inherited[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。EventDispatcher
属性详细信息
styleNames属性
styleNames:Array  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

一个数组,其中包含此样式表中注册的所有样式的名称(字符串形式)。



实现
    public function get styleNames():Array
构造函数详细信息
StyleSheet()构造函数
public function StyleSheet()

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

创建新的 StyleSheet 对象。

另请参见

方法详细信息
clear()方法
public function clear():void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从样式表对象中删除所有样式。

getStyle()方法 
public function getStyle(styleName:String):Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

返回与名为 styleName 的样式相关联的样式对象的一个副本。如果没有与 styleName 相关联的样式对象,则返回 null

参数

styleName:String — 一个字符串,该字符串指定要检索的样式的名称。

返回
Object — 一个对象。

另请参见


示例
如何使用示例
有关如何使用 getStyle() 方法的说明,请参阅 parseCSS()transform() 方法的示例。
parseCSS()方法 
public function parseCSS(CSSText:String):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

分析 CSSText 中的 CSS 并用它加载样式表。如果 CSSText 中的某个样式在 styleSheet 中已经存在,则保留 styleSheet 中的属性,在 styleSheet 中只添加或更改 CSSText 中的属性。

若要扩展本机 CSS 分析功能,可通过创建 StyleSheet 类的子类来覆盖此方法。

参数

CSSText:String — 要分析的 CSS 文本(字符串)。


示例

在下面的示例中,当用户单击文本文件时,则会将从某个文件中加载的 CSS 样式应用于文本文件内容。

在构造函数中,创建了一个多行文本字段,并将其内容设置为 HTML 格式的字符串。(在应用 CSS 样式之前不会呈现 HTML heading 和 span 标签。)将创建一个用于指定 CSS 文件位置的 URLRequest 对象,就本示例而言,该 CSS 文件与 SWF 文件位于同一个目录中。该文件是使用 URLLoader 对象加载的。共为 loader URLLoader 对象添加了两个事件侦听器。如果发生 IO 错误,则会调用 errorHandler() 方法,它在文本字段中显示一条错误消息。在接收所有数据并将其放在 loader URLLoader 对象的 data 属性中后,将调用 loaderCompleteHandler() 方法。此方法分析从文件加载的数据中的 CSS 样式,并使用样式定义填充 sheet StyleSheet 对象。

当用户单击文本字段时,将调用 clickHandler() 方法。clickHandler() 方法中的 if 语句检查以确保在将样式表应用于文本字段之前完成文件加载。为了使样式表生效,在将样式表分配给文本字段后,必须为内容重新分配 htmlText 属性。还会将 heading 标签的 CSS font-familycolor 属性值附加到文本字段内容中。(如果样式表值无效,则这些属性的值为“undefined”。)

下面是一个可用于此示例的 CSS 文件内容的示例。在运行此示例之前,请先创建一个文本文件,将下面的 CSS 内容复制到该文件中,然后使用文件名 test.css 保存该文件,并将其放在与 SWF 文件相同的目录中。

p {
      font-family: Times New Roman, Times, _serif;
      font-size: 14;
       font-Style: italic;
	    margin-left: 10;  
   }
   h1 {
      font-family: Arial, Helvetica, _sans;
      font-size: 20;
      font-weight: bold;
   }
   .bluetext {
      color: #0000CC;
   }
package {
    import flash.display.Sprite;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.StyleSheet;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.IOErrorEvent;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class StyleSheet_parseCSSExample extends Sprite {
        private var loader:URLLoader = new URLLoader();
        private var field:TextField = new TextField();
        private 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>";
        private var sheet:StyleSheet = new StyleSheet();
        private var cssReady:Boolean = false;

        public function StyleSheet_parseCSSExample() {
            field.x = 10;
            field.y = 10;
            field.background = true;
            field.multiline = true;
            field.autoSize = TextFieldAutoSize.LEFT;
            field.htmlText = exampleText;

            field.addEventListener(MouseEvent.CLICK, clickHandler);
            
            addChild(field);
            
            var req:URLRequest = new URLRequest("test.css");
            loader.load(req);

            loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);
        }

        public function errorHandler(e:IOErrorEvent):void {
            field.htmlText = "Couldn't load the style sheet file.";
        }

        public function loaderCompleteHandler(event:Event):void {
            sheet.parseCSS(loader.data);
            cssReady = true;
        }

        public function clickHandler(e:MouseEvent):void {

            if (cssReady) {
                field.styleSheet = sheet;
                field.htmlText = exampleText;
                
                var style:Object = sheet.getStyle("h1");
                field.htmlText += "<p>Headline font-family is: " + style.fontFamily + "</p>";
                field.htmlText += "<p>Headline color is: " + style.color + "</p>";  

            } else {
                field.htmlText = "Couldn't apply the CSS styles.";
            }
        }
    }
}
setStyle()方法 
public function setStyle(styleName:String, styleObject:Object):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

将具有指定名称的新样式添加到样式表对象中。如果该样式表中没有指定名称的样式,将添加该样式。如果该样式表中已经有指定名称的样式,将替换该样式。如果 styleObject 参数为 null,则删除指定名称的样式。

Flash Player 将创建传递给此方法的样式对象的一个副本。

要获取所支持样式的列表,请参阅 StyleSheet 类说明中的表。

参数

styleName:String — 一个字符串,用于指定要添加到样式表中的样式的名称。
 
styleObject:Object — 一个说明样式的对象,或 null

transform()方法 
public function transform(formatObject:Object):TextFormat

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

扩展 CSS 分析功能。高级开发人员可通过扩展 StyleSheet 类覆盖此方法。

参数

formatObject:Object — 一个说明样式的对象(包含作为对象属性的样式规则),或 null

返回
TextFormat — 一个包含 CSS 规则向文本格式属性映射的结果的 TextFormat 对象。

另请参见


示例

本示例使用 transform() 方法将 CSS 文件中的某个样式应用于文本字段的 TextFormat 对象。

CSS 样式通常用于设置 HTML 内容的格式。但是,通过使用 StyleSheet 对象的 transform() 方法,可以将特定 CSS 样式分配给 TextFormat 对象,然后将其应用于任何文本字段。

我们使用 URLRequestURLLoader 对象来加载 CSS 文件; 为 Event.COMPLETE 事件添加一个事件侦听器,在接收所有数据并将其放在 loader URLLoader 对象的 data 属性中后,将会发生该事件。然后,loaderCompleteHandler() 方法分析从文件加载的数据中的 CSS,并使用这些样式填充 sheet StyleSheet 对象。样式表的 getStyle() 方法将检索 HTML 段落样式,然后使用样式表的 transform() 方法将这些样式分配给 cssFormat TextFormat 对象。最后,将 inputField 文本字段的默认文本格式设置为新的 cssFormat 文本格式。

package {
    import flash.display.Sprite;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.StyleSheet;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.TextFieldType;
    import flash.events.IOErrorEvent;
    import flash.events.Event;

    public class StyleSheet_transformExample extends Sprite {
        private var loader:URLLoader = new URLLoader();
        private var inputField:TextField = new TextField();
        private var sheet:StyleSheet = new StyleSheet();

        public function StyleSheet_transformExample() {
            inputField.x = 10;
            inputField.y = 10;
            inputField.background = true;
            inputField.width = 300;
            inputField.height = 200;
            inputField.wordWrap = true;
            inputField.multiline = true;    
            inputField.type = TextFieldType.INPUT;

            addChild(inputField);
            
            var req:URLRequest = new URLRequest("test.css");
            loader.load(req);

            loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);
        }

        public function errorHandler(e:IOErrorEvent):void {
            inputField.htmlText = "Couldn't load the style sheet file.";
        }

        public function loaderCompleteHandler(event:Event):void {
            var cssFormat:TextFormat = new TextFormat();
            sheet.parseCSS(loader.data);
            var style:Object = sheet.getStyle("p");
            cssFormat = sheet.transform(style);
            inputField.defaultTextFormat = cssFormat;
        }
    }
}
示例 如何使用示例
StyleSheetExample.as

下例创建了一个新样式表并将粗体和红色字体处理分配给标题样式。
package {
    import flash.display.Sprite;
    import flash.text.StyleSheet;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;

    public class StyleSheetExample extends Sprite {

        public function StyleSheetExample() {
            var style:StyleSheet = new StyleSheet();

            var heading:Object = new Object();
            heading.fontWeight = "bold";
            heading.color = "#FF0000";

            var body:Object = new Object();
            body.fontStyle = "italic";

            style.setStyle(".heading", heading);
            style.setStyle("body", body);

            var label:TextField = new TextField();
            label.styleSheet = style;
            label.htmlText = "<body><span class='heading'>Hello </span>World...</body>";
            addChild(label);
        }
    }
}