使用 Flash 绘制各种状态下的组件时,通常由组件的样式来指定组件的外观、图标、文本格式和填充的值。例如,当您在按钮上单击鼠标按键时,Flash 将使用一个外观来绘制按钮以显示按钮的按下状态,该外观不同于在显示按钮的弹起或正常状态时所使用的外观。当组件处于禁用状态(通过将
enabled
属性设置为
false
来实现)时也会使用不同的外观。
您可以在文档、类和实例级别设置组件的样式。另外,某些样式属性可以从父组件继承。例如,List 组件便通过继承 BaseScrollPane 来继承 ScrollBar 样式。
您可以通过以下方式设置样式以自定义组件:
-
在组件实例上设置样式。您可以更改单个组件实例的颜色和文本属性。这种方式在有些情况下是有效的,但是,如果您需要在文档中设置所有组件的各项属性,这种方式就会很耗时。
-
在文档中设置给定类型的所有组件的样式。如果您要对给定类型的所有组件(例如对文档中的所有 CheckBox 或所有 Button)应用一致的外观,则可以在组件级别设置样式。
容器组件将继承在容器上设置的样式属性的值。
在使用“实时预览”功能查看舞台上的组件时,Flash 并不会显示对样式属性所做的更改。
理解样式设置
以下是关于使用样式的几个要点:
-
继承
-
组件子级在设计时被设置为从父组件继承样式。不能在 ActionScript 中设置样式的继承。
-
优先级
-
如果以多种方式设置组件样式,则 Flash 会根据样式的优先级顺序使用它遇到的第一种样式。Flash 按如下顺序查找样式,直到找到一个值:
-
Flash 查找组件实例上的样式属性。
-
如果样式是继承样式的一种,Flash 将彻底检查父层次结构来查找继承的值。
-
Flash 查找组件上的样式。
-
Flash 查找 StyleManager 上的全局设置。
-
如果尚未定义该属性,则属性值为
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);
下图显示了在具有“提交”标签的按钮上进行这些设置的效果:
在组件实例上通过
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()
方法为所有组件设置样式。
-
将一个 List 组件拖到舞台上,然后为其指定实例名称
aList
。
-
将一个 Button 组件拖到舞台上,然后为其指定实例名称
aButton
。
-
如果尚未打开“动作”面板,可按
F9
或从“窗口”菜单选择“动作”来打开该面板,然后在时间轴的第 1 帧中输入以下代码,将所有组件的文本颜色设置为红色:
import fl.managers.StyleManager;
var tf:TextFormat = new TextFormat();
tf.color = 0xFF0000;
StyleManager.setStyle("textFormat", tf);
-
将以下代码添加到“动作”面板以用文本填充 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;
-
选择“控制”>“测试影片”或按 Ctrl+Enter 以编译代码并测试内容。按钮标签和列表中的文本都应该为红色。
|
|
|