簡體   English   中英

在庫中設置GWT小部件樣式的最佳方法

[英]Best way to style GWT widgets in a library

我正在開發一些小部件進入一個庫,供我工作的公司內部使用。

我不知道為小部件設置樣式的推薦方法是什么。

至少有以下幾種方式:

  • 使用Widget.setPrimaryStyleName並讓用戶提供外部css。 我們使用maven原型來構建應用程序,因此我們可以提供默認樣式。 無論如何我不太喜歡它。

  • 使用GWT 2.0 CssResourceBundle。 因此我們可以將CSS編譯到模塊中並進行優化(並且它也可以依賴於瀏覽器)。

  • 提供具有樣式的模塊。 類似於默認的GWT主題。 但我不知道這究竟是如何運作的。

我想要:

  • 盡可能地使組件具有內聚性(不依賴於外部包含的css)
  • 打開門來修改樣式(如果我想改變一些小部件在具體應用程序中的外觀)。

你對這個主題有什么經驗?

注意:如果您正在尋找明確的答案,請查看所有答案和評論。 有不同的想法和所有好的想法。 然后選擇最適合你的:)

我認為最好的方法是在模塊中提供樣式。 這樣您就可以輕松地重新設置或為控件添加“主題”。

我正在做一個類似的項目,它托管在github上( http://github.com/markovuksanovic/gwt-styles ),所以你可能想要檢查一下。 你可以下載jar文件,將它包含在你的項目中,並在你的模塊xml中指定你想要使用那種風格..就像

<inherits name='gwt.theme.flick.Flick'/>

我建議你為你的風格使用新模塊,這樣你就可以輕松切換樣式......(只需更改繼承標簽)。 所以,例如,如果你的一個小部件使用css類“my-widget”,你將有一個“樣式”模塊(或多個模塊)來定義那個css類(在css文件中) - 這樣你就可以擁有實現該css類並在它們之間切換的多個模塊就像在inherits標記中更改模塊名一樣簡單。 這樣你就可以很好地解耦代碼 - 樣式將獨立於小部件的技術實現。 如果您還有其他問題,請隨時提出。

PS我忘記在上面提到了 - 密切關注如何構建樣式模塊(build.xml),這有點棘手。 您可以在以下網址http://developerlife.com/tutorials/?p=229找到有關創建模塊的更多信息

如果您只是編寫一個新的小部件並希望人們能夠自定義其CSS,那么我使用的一個模式是:

public class MyWidget extends Composite {
  public interface MyCss extends CssResource {
    ...
  }

  private static MyCss defaultStyle;
  private static MyCss ensureDefaultStyle() {
    if (defaultStyle == null) {
      defaultStyle = GWT.create(DefaultResourceBundle.class).css();
    }
    return defaultStyle;
  }

  /** If you want to use default style, call this */
  public MyWidget() {
    this(ensureDefaultStyle());
  }

  /** If you want to use your custom style, call this */
  public MyWidget(MyCss css) {
    ...
  }
}

因此,您的窗口小部件庫可以提供CSS接口,並為其提供默認實現。 如果您的用戶想要自定義它,他可以將CSS接口綁定到他自己選擇的css文件中,並使用第二個構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM