动态更改GWT主题

时间:2012-10-09 09:17:35

标签: css gwt

我有一个GWT应用程序, 我创建了appBlueTheme.jar,appOrangeTheme.jar并添加到项目的BuildPath中。 我的module.gwt.xml文件有

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

但在我的应用程序中,我看到appBlueTheme的效果,如GWT doc说的

“继承的模块将按照列出的顺序级联”

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

1 个答案:

答案 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");