通过单击Flex3中的按钮动态选择css文件
我需要创建一个应用程序,其中我们正在更改应用程序的样式,该样式是基于按钮单击的应用程序的主题 我已经下载了所有包含不同CSS文件的主题。我需要为应用程序动态声明CSS以应用该主题 我有文件名Theme1.css、Theme2.css、Theme3.css、Theme4.css、Theme5.css 当我点击Theme 1按钮时,我需要应用Theme1.css文件作为样式源。类似于当我点击Theme 2按钮时,我需要应用Theme2.css文件作为样式源 注意:css文件包含应用程序和应用程序组件的样式通过单击Flex3中的按钮动态选择css文件,css,apache-flex,flex3,styles,stylesheet,Css,Apache Flex,Flex3,Styles,Stylesheet,我需要创建一个应用程序,其中我们正在更改应用程序的样式,该样式是基于按钮单击的应用程序的主题 我已经下载了所有包含不同CSS文件的主题。我需要为应用程序动态声明CSS以应用该主题 我有文件名Theme1.css、Theme2.css、Theme3.css、Theme4.css、Theme5.css 当我点击Theme 1按钮时,我需要应用Theme1.css文件作为样式源。类似于当我点击Theme 2按钮时,我需要应用Theme2.css文件作为样式源 注意:css文件包含应用程序和应用程序组件
祝你度过愉快的一天。…我认为你必须一个接一个地循环所有控件,并在控件上设置主题。 例如。 若您将默认主题设置为红色,而按钮为红色,那个么您可以将主题更改为蓝色,然后使用控件循环将按钮颜色设置为蓝色。 也许这对你有帮助 如果你不明白我说的话,请问我
谢谢。您必须使用eclipse/flex builder中的工具将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作为参数传递 您需要将CSS文件编译为SWF。您可以右键单击FlashBuilder浏览器窗口中的CSS文件,然后从菜单中选择CompileCSS to SWF 然后使用StyleManager中的loadStyleDeclarations方法加载带有CSS信息的SWF文件 上一步仅将新样式添加到样式子系统。如果要清除旧样式,首先需要unloadStyleDeclarations方法 如果卸载当前活动的CSS声明,请使用false作为第二个参数,以便StyleManager不会使样式无效,并为stage上的组件重建样式声明链/缓存。这不仅会很慢,而且会导致在应用新样式之前使用默认样式刷新屏幕 您可以使用类似于此的内容,并在需要更改主题时使用适当的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;
}
嗨,Manoj,当用户点击按钮时,我不需要改变主题。首先理解问题,然后回答。嗨,萨加尔·拉瓦尔,我的解决方案也对你有帮助。请尝试循环所有控制,然后问我是否有任何问题。这也有助于我。。。很好的解决方案Manoj SavaliaHi Roy,谢谢你的回答。但仍然面临着问题。当我调用unloadStyleDeclaration方法时,它会给我一个异常。总之,它不起作用。@SagarRawal,如果你告诉我异常情况,也许我能帮上忙。我收到了错误:TypeError:error 1009:无法访问空对象引用的属性或方法。在StyleManagerImpl.as的900行上,我正在使用FLEX SDK 3.4…您确实在函数上方的某个地方初始化了变量currentTheme,对吗?