Flex AIR应用换肤功能(Android和IOS)

说明

换肤功能,即将整个应用的皮肤都进行更换,其实质,是动态加载swf文件的过程,而这些swf文件则有css文件编译而来。

关于换肤功能,在androidios系统的实现方式是不同的。主要原因,是因为ios不支持本地加载(ipa中包含)多个swf文件。

 

换肤基础

1) 原理 :就是将各种不同的css文件先编译成swf,然后用StyleManager类的loadStyleDeclarations方法加载换肤的swf

2) 基础: 定义css文件,如下:

/* CSS file */

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

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

s|Application{

     font-size: 12;

     skin-class: ClassReference("IndexSkin");

}

注意如果是用skin-class,则皮肤文件必须与样式文件放在同一目录下,否则有问题.

右击css文件 选择css文件编译为swf’,这样就会在编译的目录下产生对应的swf件。

3) 应用:

FlexGlobals.topLevelApplication.styleManager.loadStyleDeclarations2("com/xx/xx/xx/cloudstudio/xx/styles/StyleChoice1.swf",true);

Android换肤

1.  目录结构



2. 定义四套css文件

需要将这四套css文件编译为swf文件,可通过右键点击该css文件,选择“将CSS编译为SWF”即可。


3.  使用换肤功能

注: 标记代码中,ApplicationDomain.currentDomain建议就这么写,因为在ios系统中,这个是必须的,它可以是该swf文件与主swf文件放在同一个域中进行访问。

styleManager.loadStyleDeclarations2(skinName,true, ApplicationDomain.currentDomain,null);其实质就是去加载本地的swf文件。


4. 打包:

对于Android系统,打包可以直接通过FB进行。打包时,需要将要使用的swf文件都打进apk中。


Apk解压后可看见:


IOS换肤: 

  说明:  ios不建议使用换肤功能,因为会影响系统的性能,严重情况下会使应用的崩溃,无法通过苹果的审核。

1 )  开发说明: IOS换肤的实现和Android有所不同,主要是IOS系统不支持同时加载多个swf文件。所以,如果想在ios系统上实现换肤功能,则必须使用服务器文件托管的方式,即将swf文件放到远程服务器上,由本地区访问远程的swf文件,完成换肤功能。

2)  使用txt文件声明要托管的swf文件


注: txt文件里的内容必须按照上图所示格式编写,即每一个swf文件以换行分隔。

3) 在应用程序描述符文件中配置该txt文件


注: 表示根目录下的.txt文件:

4)  使用ADTAOT模式打包ipa


注:要将txt文件、编译后的几个swf文件都进行打包。打包结束后,会生成新的文件夹:


5)  使用打包后生成的swf文件,实现换肤功能

externalStrippedSwfs文件夹中的swf文件都放到远程的服务器中,然后本地访问这些swf文件即可,如:


原文地址:https://www.cnblogs.com/hehe520/p/6330053.html