一般而言,當 Flash 將組件繪製為各種狀態時,該組件的樣式會指定其外觀元素、圖示、文字格式以及邊框間距的值。例如,Flash 會以不同的外觀元素繪製 Button,以顯示它的滑入狀態 (當您以滑鼠按鈕按一下此 Button 時會發生此狀態) 有別於一般及正常狀態。當它處於停用狀態 (將
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);
下圖說明這些設定對於具有「Submit」標籤之按鈕的影響:
透過
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;
-
選取「控制 > 測試影片」或按 Control+Enter 鍵,編譯程式碼並測試您的內容。在按鈕標籤與清單中的文字應該都是紅色的。
|
|
|