在Java中使用UiBinder CSS而不是XML

4

在我的ui.xml文件中,我有以下样式:

<ui:style src="../teststyle.css" />

如果我想在Java文件中编程使用样式而不是UI.xml文件中,该如何调用.setStylename(...)来设置小部件的样式名,因为CSS是混淆的?
2个回答

15

要在您的视图类中使用样式,您需要执行以下步骤:

  • 在您的视图类中定义扩展CssResource接口的接口

  • 在您的视图类中定义一个接口,该接口继承自CssResource
interface Style extends CssResource {

    String myStyle();

}
  • 在您的视图类中添加一个刚才定义的ui字段类型
@UiField
Style style;
  • 在您的 ui.xml 文件中,向您的 <ui:style> 元素添加type属性(类型必须与第1步的接口匹配):
<ui:style type="com.example.MyView.Style">
  • 为了在您的视图类中访问每个要访问的CSS类,您需要向Style接口添加一个方法(如myStyle()所做的那样)。

  • 现在,您可以通过style字段访问样式(style.myStyle())。

希望这能有所帮助。


1
实际上,该字段必须命名为“style”,而不是“css”;或者您应该在ui:style上设置一个明确的field=""属性来命名Java字段,就像元素和小部件上的ui:field=""一样。 - Thomas Broyer
谢谢指出。我没有复制我的代码的那部分。 - z00bs
<ui:style field='myStyle'> 在 UiBinder 中无法正常工作。GWT Eclipse 高亮显示未将其视为问题,并且它看起来是正确的,但在运行时 GWT 抛出 "[ERROR] [...] - Template MyWindow.ui.xml has no ui:field attribute for ...MyWindow#supportStyles"。看起来像是 GWT 的一个 bug。 - Joseph Lust
很好 :) ... 比使用 @external 要好得多 - Eduardo Fabricio

2

如果我理解你的问题正确,你需要定义一个继承自CssResource的类(你可能已经做过了)。在你的视图中,你可以有这个类的静态实例(我们称之为cssInstance)。在构造函数中,你必须调用cssInstance.ensureInjected()。如果你现在想要添加或设置样式,你可以像这样轻松地做到:示例:anyWidget.addStyleName(cssInstance.styleBorder());


此外:http://code.google.com/intl/en/webtoolkit/doc/latest/DevGuideUiBinder.html#Programmatic_access - axtavt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接