有没有办法在ActionScript中以编程方式添加flex皮肤?

时间:2011-09-02 18:34:47

标签: actionscript-3 flex flex4

我有各种通过程序化皮肤进行蒙皮的组件。 skin类引用一个单例类,该类包含要应用于组件不同方面的各种颜色。单例类的默认颜色设置为黑/灰等变体。我从XML文件加载自定义颜色,然后加载到单例中。我正在通过主应用程序mxml中包含的css样式表应用自定义外观。

问题是当swf最初加载时,屏幕上绘制的组件是黑色的,并不反映从XML文件加载的颜色变化。我有一些下拉窗口显示按钮点击,这些下拉确实反映了XML文件中的正确颜色。因此,系统工作正常,但组件的初始绘制显然发生在加载XML并应用于单例之前。

我的问题是,有没有办法通过调用构造函数以编程方式将外观应用于元素?

我在我的css文件中有这个:

.PanControlsBackground {
    borderSkin:ClassReference('skins.buttons.PanControlsBackground');
}

我正在使用这个类:

_app.panControls.styleName = "PanControlsBackground";

有没有办法打电话:

_app.panControls.styleName = new PanControlsBackground();

还是那种效果?这样,我可以删除css文件中皮肤的加载并控制它们何时被实例化,以确保在显示各种组件之前应用了正确的颜色。

1 个答案:

答案 0 :(得分:1)

您可以使用styleManager在运行时操作样式。例如,

.PanControlsBackground {
  /* leave it blank */
}

然后在一些脚本块中:

styleManager.getStyleDeclaration(".PanControlsBackground").setStyle("borderSkin", skins.buttons.PanControlsBackground);

所以,这是以编程方式改变皮肤的一种方式。

但是,我不太了解如何在旧皮肤上处理垃圾收集。例如,GC对于这种切换皮肤的方法与仅为每个皮肤设置一堆不同的CSS类并在它们之间切换有何不同?我无法回答这个问题。

我认为至少可以说上面的方法会确保首先使用默认(或者你可能创建的其他最小皮肤),并且可以控制在初始化过程中何时实例化其他皮肤。