当使用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>