設定樣式

一般而言,當 Flash 將組件繪製為各種狀態時,該組件的樣式會指定其外觀元素、圖示、文字格式以及邊框間距的值。例如,Flash 會以不同的外觀元素繪製 Button,以顯示它的滑入狀態 (當您以滑鼠按鈕按一下此 Button 時會發生此狀態) 有別於一般及正常狀態。當它處於停用狀態 (將 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);

下圖說明這些設定對於具有「Submit」標籤之按鈕的影響:

其標籤套用新 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. 選取「控制 > 測試影片」或按 Control+Enter 鍵,編譯程式碼並測試您的內容。在按鈕標籤與清單中的文字應該都是紅色的。