我已经使用ThemeBuilder创建了一个主题,但现在我需要在CSS类中添加一个属性,所以我可以在ListView的选定元素中使用不同的字体颜色。例如。
理想情况下,我希望构建器支持在.theme文件中指定这样的配置,特别是因为字体颜色不会影响用于支持旧浏览器的图像生成过程。实际上,构建器应该支持所有不会影响生成的图像的标准CSS3属性。
显然可以修改ThemeBuilder jar来实现这一点,但这不是一个好主意。
我查看了生成的外观类,我的第一次尝试是使用以下构造函数:
public Css3ContentPanelAppearance(Css3ContentPanelResources resources) {
this(resources, GWT.<Css3ContentPanelTemplate> create(Css3ContentPanelTemplate.class));
}
这不能很好地工作,因为无论使用哪个Css3ContentPanelResources,所有使用Css3ContentPanelAppearance的组件都会受到影响。我相信这是因为CSS类名基于外观类名和CssResource类名。
答案 0 :(得分:1)
解决方案非常简单:创建生成的外观类的子类,如下所示:
public class CustomCss3ListViewAppearance extends Css3ListViewAppearance {
public interface CustomCss3ListViewResources extends Css3ListViewAppearance.Css3ListViewResources {
// Load the original resources first and then the custom one, so the customizations will take precedence.
@ClientBundle.Source({"com/example/client/base/listview/Css3ListView.css","CustomCss3ListView.css"})
@Override
Css3ListViewAppearance.Css3ListViewStyle css();
}
public CustomCss3ListViewAppearance() {
super(GWT.<Css3ListViewAppearance.Css3ListViewResources>create(CustomCss3ListViewResources.class));
}
}
然后,您可以创建一个独立的JAR模块,该模块依赖于生成的主题,在.gwt.xml文件中指定一些绑定,它的行为与纯生成的主题完全相同(只需要添加一个依赖项并将其导入应用程序.gwt.xml文件):
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='myCustomTheme'>
<inherits name="com.example.Theme"/>
<replace-with class="com.example.client.base.listview.CustomCss3ListViewAppearance">
<when-type-is class="com.sencha.gxt.widget.core.client.ListView.ListViewAppearance" />
<when-property-is name="gxt.theme" value="myTheme" />
</replace-with>
<source path="myCustomTheme/client"/>
</module>