我有一个GWT应用程序, 我创建了appBlueTheme.jar,appOrangeTheme.jar并添加到项目的BuildPath中。 我的module.gwt.xml文件有
....
<inherits name='appBlueTheme.appBlueTheme'/>
<inherits name='appOrangeTheme.appOrangeTheme'/>
...
但在我的应用程序中,我看到appBlueTheme的效果,如GWT doc说的
“继承的模块将按照列出的顺序级联”
我希望根据用户响应更改主题。 我如何实现这一目标?
答案 0 :(得分:3)
如果“主题”是指造型,那么正确的方法不是为每个主题创建一个单独的jar,而是使用CSS代替。
一个。如果使用CSSResource,则可以使用条件CSS:
https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle#Conditional_CSS
B中。如果您使用外部CSS文件,而不是
.headerPanel {
background: blue;
}
您可以根据所选主题指定不同的背景:
.orangeTheme .headerPanel {
background: orange;
}
.blueTheme .headerPanel {
background: blue;
}
请注意,您的代码(或Ui:Binder)只应将类“headerPanel”指定给窗口小部件。启动应用程序时,为最外面的小部件(添加到RootPanel的小部件)分配默认主题。例如,您设置
myAppPanel.addStyleName("blueTheme");
这将为具有“headerPanel”类的所有小部件提供蓝色背景。当用户选择不同的主题时,删除“blueTheme”类并添加“orangeTheme”类。它会自动刷新页面(无需重新加载),所有样式都会改变。
编辑:
如果您需要将主题应用于整个应用,包括PopupPanel和对话框,请使用此代码应用您的主题:
Document.get().getBody().setClassName("blueTheme");