Flex4动态加载和切换CSS

Jack 撰写  

Flex4中动态加载CSS文件的方式已经和Flex3有了一定的区别

主要步骤如下:

1.编写不同的CSS文件

见后文

2.将CSS文件编译成SWF文件

在FlashBuilder中右键CSS文件,选择Compile CSS to SWF,

这时bin-debug目录下的对应位置就会生成一个与CSS同名的SWF文件。

选中后该选项前会有勾,之后只要修改了CSS文件,就会自动编译成SWF

2.用styleManager加载SWF

代码中这样写:

this.styleManager.loadStyleDeclarations2(“MyCss1.swf”);   //代码中填写上一步由CSS生成的SWF文件路径


CSS写法:

MyCss1.css

/* CSS file */

/*命名空间*/

@namespace s “library://ns.adobe.com/flex/spark”;

@namespace mx “library://ns.adobe.com/flex/mx”;

/*使用skin类来定义皮肤,所以要用ClassReference函数*/

s|List{

skin-class:ClassReference(“skins.ListSkin1″);

}

/*符号#代表指定的ID*/

s|Label#labelExamples{

font-size:14;

color:#990099;

}

s|CheckBox{

font-size:9;

color:#FF3300;

}

s|RadioButton{

font-size:92;

color:#990099;

}

s|Button{

font-size:32;

color:#FF3300;

}

注:CSS中无法设置ItemRenderer,所以如果要实现不同CSS用不同的ItemRenderer,为各个CSS指定不同的skin类,并且在skin类中分别设置的ItemRenderer

例如,我的例子中要为List设置不同的ItemRenderer,就不要写成<s:List itemRenderer=”itemRenderers.ListItemRenderer1″…/>

而要在CSS中为List指定skinClass为skins.ListSkin1,代码:skin-class:ClassReference(“skins.ListSkin1″);

然后,在skin.ListSkin1中设置ItemRenderer,代码:

<s:DataGroup id=”dataGroup” itemRenderer=”itemRenderers.ListItemRenderer1″>

<s:layout>…


MyCss2.css——另一个CSS文件

/* CSS file */

@namespace s “library://ns.adobe.com/flex/spark”;

@namespace mx “library://ns.adobe.com/flex/mx”;

/* 使用了另一个Skin类*/

s|List{

skin-class:ClassReference(“skins.ListSkin2″);

}

s|Label#labelExamples{

font-size:42;

color:#009966;

}

s|CheckBox{

font-size:22;

color:#009966;

}

s|RadioButton{

font-size:20;

color:#009966;

}

s|Button{

font-size:12;

color:#00FFFF;

}


完整源代码:SwitchCSSInRuntime

发表评论

你必须在 登录 后才能发表评论.