當使用Action Script創建一個skinnable component組件時,需要創建2個類。一個是組件類,一個組件類要使用的skin類。
1.在組件類中定義了組件的核心行爲,包括派發事件、組件所要顯示的數據、在皮膚中實現的skin part和view states。
2.而皮膚類則定義了組件外觀相關的信息,定義了組件中所包含的子組件,組件的默認佈局等。
自定義組件可能會需要重載4個方法,commitProperies(),createChildren(),measure(),updateDisplayList().
而自定義skinnable component組件時,還可能需要重載下面幾個方法。 attachSkin(),detachSkin(),partAdded(),partRemoved(),getCurrentState()
仔細看下面的2個例子,代碼來自於官方教程Using_Flex4中的2337頁。
第1段代碼是組件類,
第2段代碼是皮膚類。
這2段代碼中說明了好多問題。
1.組件類中的組件如何和皮膚類中定義的組件對應
組件類中的代碼:
[SkinPart(required="true")]
public var modeButton:Button;
皮膚類中的代碼:
<s:Button id="modeButton"/>
2.如何在皮膚中定義state並且在組件類中使用
組件類中的代碼:
[SkinState("normal")]
[SkinState("normalDisabled")]
[SkinState("textLeft")]
[SkinState("textLeftDisabled")]
皮膚類中的代碼:
<s:states>
<s:State name="normal" />
<s:State name="normalDisabled" stateGroups="disabledGroup"/>
<s:State name="textLeft"/>
<s:State name="textLeftDisabled" stateGroups="disabledGroup"/>
</s:states>