2012-10-09 41 views
1

可能重复:
ThemeChanger in GWT-Ext更改GWT主题动态

我有一个GWT应用, 我创建appBlueTheme.jar,appOrangeTheme.jar并添加到项目构建路径的。 我module.gwt.xml文件有

.... 
<inherits name='appBlueTheme.appBlueTheme'/> 
<inherits name='appOrangeTheme.appOrangeTheme'/> 
... 

但在我的应用我看到appBlueTheme作为GWT文档的效果说

“继承模块将在他们列出的顺序进行级联”

我想要根据用户响应更改主题。 我如何实现这一目标?

在此先感谢..

+0

看看这个:HTTP: //stackoverflow.com/questions/5603880/themechanger-in-gwt-ext – RAS

+0

这个问题是关闭的错误。建议的副本处理不同的框架 - GWT-Ext。 –

+0

@AndreiVolgin GWT-Ext框架仅用于采用用户输入来选择主题。主动逻辑“动态主题更改”仅使用GWT完成。 – RAS

回答

3

如果“主题”你的意思是造型,正确的做法是不是为每个主题一个单独的jar,而是改用CSS。

答:如果您使用CSSResource,您可以使用条件CSS:

https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle#Conditional_CSS

B.如果你使用的不是

.headerPanel { 
    background: blue; 
} 

外部CSS文件,你可以指定一个不同选择基于主题背景:

.orangeTheme .headerPanel { 
    background: orange; 
} 
.blueTheme .headerPanel { 
    background: blue; 
} 

注您的代码(或Ui:Binder)应该只将类“headerPanel”分配给小部件。当你启动你的应用程序时,你将一个默认主题分配给你最外面的小部件(你添加到RootPanel的那个小部件)。例如,你设置了

myAppPanel.addStyleName("blueTheme"); 

这将给所有带有“headerPanel”类的小部件一个蓝色的背景。当用户选择不同的主题时,可以移除“blueTheme”类并添加“orangeTheme”类。它会自动刷新页面(无需重新加载),所有样式都会改变。

编辑:

如果你需要一个主题应用到整个应用程序,包括PopupPanel和对话框,使用此代码以应用主题:

Document.get().getBody().setClassName("blueTheme"); 
+1

方法B应该在没有页面刷新的情况下工作,不是吗?去'myAppPanel.removeStyleName(“blueTheme”); myAppPanel.addStyleName(“orangeTheme”);'应该触发应用程序范围的DOM元素重新渲染(还没有尝试过自己)。 –

+0

优秀的捕获。我不是故意说“重新加载”页面。我编辑了答案,以表明清楚。 –