2024年4月8日发(作者:)

关于皮肤

“施加皮肤”是通过改变或者替换组件的可视化元素来改变组件外观的过程。这些可视化

元素包括位图、SWF文件,或者包含画矢量图的绘图方法的类文件。

皮肤能够定义组件在不同状态下的全部或部分外观。例如,Button控件有八种可能的状态,并

有八个与之相关的皮肤属性,如下面李子所示:

状态(State)

down

over

up

disabled

selectedDisable

d

selectedDown

selectedOver

selectedUp

selectedDownSkin

selectedOverSkin

selectedUpSkin

Skin

Skin

Skin

皮肤属性(Skin property)

downSkin

overSkin

upSkin

disabledSkin

selectedDisabledSkin

缺省的皮肤类(Default skin class)

Skin

Skin

Skin

Skin

Skin

up, over, 和 down状态的缺省皮肤如下所示:

A. up B. over C.

down

其他的空间也类似地有相关皮肤的状态。比如,RadioButton控件,它是Button控件的子

类,也有up, down, 以及 over皮肤。ComboBox控件也有皮肤来定义它在disabled,down和

over状态下的外观。

可以用位图,SWF文件,或ActionScript及MXML所定义的类来创建皮肤。所有Flex组件

都有一个缺省的皮肤类来表示组件的多个状态。正如你在上表所见的那样,Button控件的八个

状态使用同一个皮肤类,Skin来画出皮肤。类内的逻辑根据Button控件

当前状态来确定它的外观。

使用样式属性可以为组件指定皮肤。可以通过MXML标记属性,StyleManager类,

块或“样式表(style Sheet)”等方式来设置样式属性。大多数应用使用样式

表来组织和应用皮肤。样式表可以在编译期或者运行期载入。更多有关运行期载入样式表的信

息见Loading style sheets at run time。

皮肤类型

通常用位图或者矢量图来定义皮肤。位图在Flex中被称为“图片类型(graphical)”皮

肤,它由构成图像的独立的象素点组成。Bitmap图片的缺点就是它通常为特定的解决方案定制。

如果要缩放或者变换图像,那么图片将可能失真。

矢量图,在Flex被称为“程序类型(

programmatic

)”皮肤,包含一系列线(line)的定

义,这些定义指定了线的开始和结束点,粗细,颜色以及其他Adobe® Flash® Player画线时所

需的信息。当矢量图作缩放,旋转或作其他方式的改变时,通过传递线的定义,Flash Player

就可以很容易地计算出矢量图的布局。因此,对矢量图可以做很多种类型的改变,而不必担心

失真。

使用“程序类型”皮肤的一个好处就是可以创建矢量图来对皮肤进行大量的编程控制,而

有些控制则是“图片类型”皮肤无法做到的。可以在Flex开发环境中或文本编辑器中直接开发

“程序类型”皮肤,而不需要图形开发工具,比如Adobe Flash。“程序类型”皮肤使用的内存

较少,因为它们不包括外部的图片文件。

下表描述了不同类型的皮肤:

皮肤类型

(Skin type)

图片类型皮肤

(Graphical

skins)

定义皮肤外观的图片。这些图片可以是PEG, GIF, 或 PNG 文件,也可

以是SWF文件中嵌入的元件(symbols)。通常,使用Adobe® PhotoShop®

或者Adobe® Illustrator®这样的绘图软件来创建“图片类”皮肤。更

多信息见Creating graphical skins.

程序类型皮肤

(Programmatic

skins)

用来定义皮肤的ActionScript或MXML类。想要改变以“程序类型”

皮肤作为外观的控件的视觉效果,就要编辑ActionScript或者MXML文

件,可以使用一个单独的类来定义多个皮肤。

更多信息见 Creating programmatic skins.

有状态皮肤 A type of programmatic skin that uses view states, where each view

描述(Description)