1.创建Flex工程, 实现代码
1.> Hello.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<s:layout>
<s:BasicLayout />
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<!-- 设定应用样式 -->
<fx:Script>
<![CDATA[
import mx.managers.SystemManagerGlobals;
private var manager:IStyleManager2 = StyleManager.getStyleManager(null);
private function changeCSS():void{
//动态加载编译后的样式
manager.loadStyleDeclarations("cssTest2.swf");
}
]]>
</fx:Script>
<fx:Style source="cssTest.css"/>
<s:Panel width="250" height="200" horizontalCenter="0" verticalCenter="0" title="CSS显示">
<s:layout>
<s:BasicLayout />
</s:layout>
<!--响应按钮点击事件,改变样式-->
<s:Button label="样式按钮" horizontalCenter="0" verticalCenter="0" click="changeCSS()"/>
<s:Label text="样式文本" horizontalCenter="0" verticalCenter="-21"/>
</s:Panel>
</s:Application>
2.> cssTest.css
/*一个测试的CSS文件*/
/*_/_/_/_/设定Button样式_/_/_/_/*/
/*@namespace "library://ns.adobe.com/flex/mx"; */
@namespace "library://ns.adobe.com/flex/spark";
Button {
fontSize: 12;
color: #FF9933;
}
/*_/_/_/_/设定Panel样式_/_/_/_/*/
Panel {
fontSize: 12;
color: #FF9933;
}
/*_/_/_/_/设定Label样式_/_/_/_/*/
Label {
fontSize: 12;
color: #FF9933;
}
3.> cssTest2.css
/* CSS file */
/*一个测试的CSS文件*/
/*_/_/_/_/设定Button样式_/_/_/_/*/
/*@namespace "library://ns.adobe.com/flex/mx"; */
@namespace "library://ns.adobe.com/flex/spark";
Button {
fontSize: 14;
color: #FF99FF;
}
/*_/_/_/_/设定Panel样式_/_/_/_/*/
Panel {
fontSize: 12;
color: #FF99FF;
}
/*_/_/_/_/设定Label样式_/_/_/_/*/
Label {
fontSize: 14;
color: #FF99FF;
}
2. 右键cssTest2.css文件,然后选择"编译CSS为SWF文件"
3. CSS编译成SWF之后,再使用
StyleManager.getStyleManager(null).loadStyleDeclarations("cssTest2.swf");
实现动态样式切换
4.注意:
如果你的CSS中定义了类似skinClass:ClassReference这样的自定义的皮肤指向,编译出来的SWF中会找不到这些自定义的类,所以会在加载CSS.SWF之后使用的过程中报找不到类的错误.这个时候,你需要把CSS文件放到SRC的根目录下,编译出来的类便正常地包含了自定义的类。