2014-08-29 14 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