2014-08-29 42 views
1

我已经使用ThemeBuilder创建了一个主题,但现在我需要在CSS类中添加一个属性,以便例如可以在ListView的选定元素中使用不同的字体颜色。如何自定义ThemeBuilder生成的主题的CSS?

理想情况下,我期望构建器支持在.theme文件中指定这样的配置,特别是因为字体颜色不会影响用于支持旧版浏览器的图像生成过程。实际上,构建器应该支持所有不影响生成图像的标准CSS3属性。

很明显,可以修改ThemeBuilder jar来实现这一点,但这不是一个好主意。

我在所生成的外观类一看,我的第一次尝试是使用下面的构造函数:

public Css3ContentPanelAppearance(Css3ContentPanelResources resources) { 
    this(resources, GWT.<Css3ContentPanelTemplate> create(Css3ContentPanelTemplate.class)); 
} 

这并不能很好的工作,因为使用Css3ContentPanelAppearance所有组件都不管哪Css3ContentPanelResources的影响被使用。我相信会发生这种情况,因为CSS类名基于外观类名和CssResource类名。

回答

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> 
+0

宾果!一个注意事项:除非您计划切换主题,否则'when-property-is'行不是必需的。 – 2014-08-30 18:40:46