Flex AIR应用换肤功能(Android和IOS)
说明
换肤功能,即将整个应用的皮肤都进行更换,其实质,是动态加载swf文件的过程,而这些swf文件则有css文件编译而来。
关于换肤功能,在android和ios系统的实现方式是不同的。主要原因,是因为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) 使用ADT的AOT模式打包ipa
注:要将txt文件、编译后的几个swf文件都进行打包。打包结束后,会生成新的文件夹:
5) 使用打包后生成的swf文件,实现换肤功能
将externalStrippedSwfs文件夹中的swf文件都放到远程的服务器中,然后本地访问这些swf文件即可,如:
最新文章
- XStream简单入门
- 安装oracle 10g 文件系统
- HQL查询——关联和连接
- 描述Linux下文件删除的原理(计时3分钟)
- 一. Linux 常用命令总结
- Java基础之访问文件与目录——测试文件或目录的路径(TryPath)
- sql 邮件发送测试情况
- Mac添加环境变量的三种方法
- C程序内存分配
- QTcpsocket 实现FTP
- 卸载Symantec Endpoint Protection, 无需password的卸载方法
- HDU-1978How many ways
- 构建WDK驱动出现fatal error U1087: cannot have : and :: dependents for same target
- 【转】height,posHeight和pixelHeight区别
- 爬虫四大金刚:requests,selenium,BeautifulSoup,Scrapy
- $O(n+log(mod))$求乘法逆元的方法
- 数据重组:对一堆相似字典进行分类统计(shidebin)
- [Unity插件]Lua行为树(二):树结构
- 安装完打开 eclipse 提示 JVM 版本较低
- Jquery 获取第一个子元素