设置样式

使用 Flash 绘制各种状态下的组件时,通常由组件的样式来指定组件的外观、图标、文本格式和填充的值。例如,当您在按钮上单击鼠标按键时,Flash 将使用一个外观来绘制按钮以显示按钮的按下状态,该外观不同于在显示按钮的弹起或正常状态时所使用的外观。当组件处于禁用状态(通过将 enabled 属性设置为 false 来实现)时也会使用不同的外观。

您可以在文档、类和实例级别设置组件的样式。另外,某些样式属性可以从父组件继承。例如,List 组件便通过继承 BaseScrollPane 来继承 ScrollBar 样式。

您可以通过以下方式设置样式以自定义组件:

  • 在组件实例上设置样式。您可以更改单个组件实例的颜色和文本属性。这种方式在有些情况下是有效的,但是,如果您需要在文档中设置所有组件的各项属性,这种方式就会很耗时。

  • 在文档中设置给定类型的所有组件的样式。如果您要对给定类型的所有组件(例如对文档中的所有 CheckBox 或所有 Button)应用一致的外观,则可以在组件级别设置样式。

    容器组件将继承在容器上设置的样式属性的值。

    在使用“实时预览”功能查看舞台上的组件时,Flash 并不会显示对样式属性所做的更改。

理解样式设置

以下是关于使用样式的几个要点:

继承
组件子级在设计时被设置为从父组件继承样式。不能在 ActionScript 中设置样式的继承。

优先级
如果以多种方式设置组件样式,则 Flash 会根据样式的优先级顺序使用它遇到的第一种样式。Flash 按如下顺序查找样式,直到找到一个值:
  1. Flash 查找组件实例上的样式属性。

  2. 如果样式是继承样式的一种,Flash 将彻底检查父层次结构来查找继承的值。

  3. Flash 查找组件上的样式。

  4. Flash 查找 StyleManager 上的全局设置。

  5. 如果尚未定义该属性,则属性值为 undefined

访问组件的默认样式

您可以使用组件类的静态 getStyleDefinition() 方法访问组件的默认样式。例如,下面的代码检索 ComboBox 组件的默认样式并显示 buttonWidth downArrowDownSkin 属性的默认值:

import fl.controls.ComboBox; 
var styleObj:Object = ComboBox.getStyleDefinition(); 
trace(styleObj.buttonWidth); // 24 
trace(styleObj.downArrowDownSkin); // ScrollArrowDown_downSkin

在组件实例上设置和获取样式

任何 UI 组件实例都可以直接调用 setStyle() getStyle() 方法来设置或检索样式。以下语法为组件实例设置样式和值:

instanceName.setStyle("styleName", value);

此语法检索组件实例的样式:

var a_style:Object = new Object(); 
a_style = instanceName.getStyle("styleName");

请注意, getStyle() 方法返回类型 Object,因为它可以返回具有不同数据类型的多种样式。例如,以下代码为 TextArea 实例 ( aTa ) 设置字体样式,然后使用 getStyle() 方法检索该样式。该示例将返回值转换为 TextFormat 对象以将其赋给 TextFormat 变量。如果未进行转换,在试图将 Object 变量强制转换为 TextFormat 变量时编译器将发出错误。

import flash.text.TextFormat; 
 
var tf:TextFormat = new TextFormat(); 
tf.font = "Georgia"; 
aTa.setStyle("textFormat",tf); 
aTa.text = "Hello World!"; 
var aStyle:TextFormat = aTa.getStyle("textFormat") as TextFormat; 
trace(aStyle.font);

使用 TextFormat 设置文本属性

使用 TextFormat 对象可以设置组件实例的文本格式。TextFormat 对象具有一些属性,可通过这些属性指定文本特性,例如 bold bullet color font italic size 等。您可以设置 TextFormat 对象中的这些属性,然后调用 setStyle() 方法将它们应用于组件实例。例如,以下代码设置 TextFormat 对象的 font size bold 属性,并将它们应用于 Button 实例:

/* Create a new TextFormat object to set text formatting properties. */ 
var tf:TextFormat = new TextFormat(); 
tf.font = "Arial"; 
tf.size = 16; 
tf.bold = true; 
a_button.setStyle("textFormat", tf);

下图显示了在具有“提交”标签的按钮上进行这些设置的效果:

新的 textFormat 样式应用于其标签的 Button

在组件实例上通过 setStyle() 设置的样式属性具有最高优先级,可以覆盖所有其他样式设置。然而,您对一个组件实例使用 setStyle() 设置的属性越多,组件在运行时呈现得越慢。

为组件的所有实例设置样式

可以使用 StyleManager 类的静态 setComponentStyle() 方法为组件类的所有实例设置样式。例如,您可以首先将一个 Button 拖到舞台上,然后在时间轴第 1 帧的“动作”面板中添加以下 ActionScript 代码,将所有 Button 的文本颜色设置为红色:

import fl.managers.StyleManager; 
import fl.controls.Button; 
 
var tf:TextFormat = new TextFormat(); 
tf.color = 0xFF0000; 
StyleManager.setComponentStyle(Button, "textFormat", tf);

您后续添加到舞台中的所有 Button 都将具有红色标签。

为所有组件设置样式

可以使用 StyleManager 类的静态 setStyle() 方法为所有组件设置样式。

  1. 将一个 List 组件拖到舞台上,然后为其指定实例名称 aList

  2. 将一个 Button 组件拖到舞台上,然后为其指定实例名称 aButton

  3. 如果尚未打开“动作”面板,可按 F9 或从“窗口”菜单选择“动作”来打开该面板,然后在时间轴的第 1 帧中输入以下代码,将所有组件的文本颜色设置为红色:

    import fl.managers.StyleManager; 
     
    var tf:TextFormat = new TextFormat(); 
    tf.color = 0xFF0000; 
    StyleManager.setStyle("textFormat", tf);
  4. 将以下代码添加到“动作”面板以用文本填充 List。

    aList.addItem({label:"1956 Chevy (Cherry Red)", data:35000}); 
    aList.addItem({label:"1966 Mustang (Classic)", data:27000}); 
    aList.addItem({label:"1976 Volvo (Xcllnt Cond)", data:17000}); 
    aList.allowMultipleSelection = true;
  5. 选择“控制”>“测试影片”或按 Ctrl+Enter 以编译代码并测试内容。按钮标签和列表中的文本都应该为红色。