2011-12-19 41 views
1

我需要创建一个应用程序,在该应用程序中,我们将根据按钮单击更改应用程序主题的应用程序样式。通过单击FLEX 3中的按钮动态选择css文件

我已经下载了所有包含不同CSS文件的主题。我需要动态声明应用程序的CSS以应用该主题。

enter image description here

我有文件名Theme1.css,Theme2.css,Theme3.css,Theme4.css,Theme5.css。

当我点击主题1按钮,然后我需要应用Theme1.css文件作为风格的来源。类似于当我点击主题2按钮时,那么我需要应用Theme2.css文件作为样式的来源。

注意:css文件包含应用程序和应用程序组件的样式。

拥有美好的一天....

回答

1

您将不得不使用eclipse/flex构建器中的工具将CSS编译为SWF,以便可以在运行时更改样式。

您还必须维护当前主题ID的实例变量。

这是你在找什么?

public function switchTheme(theme:int):void { 
    StyleManager.unloadStyleDeclarations("assets/styles/Theme"+currentTheme+".swf"); 
    StyleManager.loadStyleDeclarations("assets/styles/Theme"+theme+".swf"); 
    this.currentTheme = theme; 
} 

然后,您可以将每个按钮的点击处理程序分配给switchTheme函数 - 将主题ID作为参数传递。

+0

嗨Roy, 感谢您的回答。 但仍然面临问题。当我调用unloadStyleDeclaration方法时,它给了我一个例外。简而言之,它不起作用。 – 2011-12-26 05:55:58

+0

@SagarRawal,如果你让我知道这个例外,也许我可以帮忙。 – 2011-12-26 20:37:36

+0

我收到错误:“TypeError:错误#1009:无法访问空对象引用的属性或方法。”在900行的StyleManagerImpl.as和我正在使用FLEX SDK 3.4 .... – 2011-12-27 03:57:55

1

我认为你必须循环中的所有控制挨个和控制设置的主题。例如: 。 如果您设置了默认主题RED并且按钮是红色的,那么您将主题更改为蓝色,然后使用控制循环将按钮颜色设置为蓝色。 可能是这对您有所帮助....

请问我,如果你没有得到什么,我说...

感谢。

+0

喜马诺, 它不喜欢,我需要改变主题当用户点击按钮时。首先了解问题然后回答。 – 2011-12-19 07:07:35

+0

嗨Sagar Rawal, 我的解决方案也对你有帮助。 请尝试循环所有控制,然后问我是否有任何问题。 – 2011-12-21 07:47:44

+0

它也帮助我...好的解决方案Manoj Savalia – 2013-08-14 10:20:21

1

您需要将您的CSS文件编译为SWF。您可以右键单击Flash Builder浏览器窗口中的CSS文件,然后从菜单中选择“将CSS编译为SWF”。

然后您使用方法从StyleManager加载您的CSS信息的SWF文件。

上一步只会将新样式添加到您的样式子系统。如果要清除旧样式,首先需要使用unloadStyleDeclarations()方法。

如果卸载当前活动的CSS声明,请使用false作为第二个参数,这样StyleManager不会使样式失效并重建舞台上组件的样式声明链/缓存。这不仅速度缓慢,而且在应用新样式之前还会导致在屏幕上使用默认样式进行刷新。

您可能有类似这样的东西,只要你想更改主题与适当的URL拨打applyTheme('url/to/theme.swf')

private var currentThemeURL:String = 'themes/default.swf'; 

public function applyTheme(themeURL:String):void 
{ 
    StyleManager.unloadStyleDeclarations(currentThemeURL, false); 

    StyleManager.loadStyleDeclarations(themeURL); 
    currentTheme = themeURL; 
} 
+0

感谢您的答案,但仍然无法正常工作..对不起。 – 2011-12-28 04:13:05