AIR/Flex学习笔记(5)

上一篇我们将一个应用程序的皮肤风格改造成了spark风格,界面变得非常漂亮。但是如果我们想开发自定义的皮肤风格应该怎么做呢?这篇文章我们来探讨一下这个问题。


    我们先来看看spark是怎样定义皮肤风格的。打开我们上篇用过的PhotoGallery例程的PhotoGallery.mxml文件,我们可以看到WindowedApplication的skinClass属性值为“spark.skins.spark.SparkChromeWindowedApplicationSkin”,那么这个SparkChromeWindowedApplicationSkin源文件在哪呢?找到你安装Flash Builder 4的文件夹,然后按.\sdks\4.0.0\frameworks\projects\airspark\src\spark\skins\spark路径就可以找到“SparkChromeWindowedApplicationSkin.mxml”这个源文件了。(注:我安装的版本是“Adobe Flash Builder 4 Premium (Build 272416)”,如果版本不同路径可能会有所变化!)Flex工程是将.\sdks\4.0.0\frameworks\projects\airspark\src\这个路径默认作为src路径的,同样的还有projects下的其他文件夹路径。
    
    Flex4的spark skin架构是一套完整的模型,将可视化组件的行为逻辑和外观完全分开,使开发者可以非常方便地自定义各种组件的皮肤风格和布局。一般情况下,组件的行为逻辑将被定义在ActionScript文件中,而外观皮肤将被定义在MXML文件中,spark皮肤框架将他们结合起来组成一个完整的可视化组件。关于这部分的完整介绍请参考官方文档:Spark Skinning,关于组件类和外观类之间的结合规则请搜索关键词“skinning contract”。另外可以参考这篇中文文章:介绍 Flex 4 beta 中的外观设计。

    我们打开SparkChromeWindowedApplicationSkin.mxml文件,可以看到SparkChromeWindowedApplicationSkin继承自SparkSkin类。SparkSkin类继承自Group,是所有spark外观的基类,也就是说该类是一个spark外观组件容器类(非常贴合WindowedApplication的概念)。代码中值得注意的还有这一段:

AIR/Flex学习笔记(5)


    “HostComponent”标签指定了该skin是用于哪个类型的组件的,即指定了宿主的类型;同时通过这个标签就可以直接访问宿主的style属性等设定值了。再下面可以看到如下代码:

AIR/Flex学习笔记(5)


    “states”标签定义了这个组件的几种外观状态,通过命名状态,并指定子组件在各状态中的外观形式,可以使组件外观切换更加方便灵活。关于states的文章很多,在此不多啰嗦,可以参考这篇:Working with States in Flex 4。

    在下面的代码就是对窗口外观的具体定义了,我们分析一下,如下图。

AIR/Flex学习笔记(5)




    通过上面的分析,我们已经了解了SparkChromeWindowedApplicationSkin.mxml文件的代码结构,自定义WindowedApplication的皮肤就变得简单了,步骤如下:
    1、将SparkChromeWindowedApplicationSkin.mxml文件复制到工程src\skins路径下,并重命名为“MyAppSkin.mxml”;
    2、在Flash Builder中打开此文件,对其中的代码做如下改变:
AIR/Flex学习笔记(5)
    我们将标题栏的高度增大到36像素,给窗口边框添加了圆角,并将边框颜色改为黑色,宽度改为2个像素;
    3、打开PhotoGallery.mxml代码,将皮肤风格改为“skinClass="skins.MyAppSkin"”;
    4、到Flash Builder安装目录的相对路径“\sdks\4.0.0\frameworks\projects\airspark\src\spark\skins\spark\windowChrome”下,将“TitleBarSkin.mxml”文件复制到工程src\skins路径;
    5、在Flash Builder中打开此文件,做如下修改:
AIR/Flex学习笔记(5)


    我们将标题栏的最小高度进行了修改,并改变了背景渐变色;
    6、再次打开MyAppSkin.mxml代码,做如下修改:


AIR/Flex学习笔记(5)

    我们指定标题栏的皮肤风格为我们修改过的TitileBarSkin类;
    7、保存运行,看看我们的成果吧。 
AIR/Flex学习笔记(5)
    
    总之,通过组件类和外观类的分离模型,我们可以重写外观,并利用组件的“skinClass”属性指定自定义的外观类,来完成任意组件的外观自定义。当然,我们也可以完全自定义组件逻辑和外观,那就是组件开发的内容了。这篇就到这,下一篇我们整理一下Flex4中spark框架的相关知识。
    
    PS. 我将本篇实例的源码导出了一个PhotoGallery.fxp文件,有需要的可以到 我的网络硬盘空间下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值