如何以布局引擎友好的方式更改vaadin中标签的字体大小?

时间:2015-04-01 17:33:18

标签: vaadin

说我有一个标签:

Label myLabel = new Label(_("I am smaller than normal text"));
myLabel.setSizeUndefined();

_是您最喜欢的本地化功能)。

我希望它比平常小。由于没有ad-hoc Label方法来实现这一点,我必须求助于添加“原始”CSS规则,例如:

CSSInject cssSmall = new CSSInject(".small { font-size: small; }");
myPage.addComponent(cssSmall);
myLabel.addStyleName("small");
myPage.addComponent(myLabel);

这只是有效的。是的,文本 更小,但是当首次构建页面时,Vaadin会对标签进行大小调整,就像字体是常规大小一样。当某些东西导致页面被重新绘制/重新传输时,Vaadin会意识到正在发生的事情,并为标签提供正确的大小。

这会导致页面显着“跳跃”,因为标签变得更短而且不够高。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

由于你的情况似乎很绝望而主题不是选项,你可以用HTML包装标签的内容(如果你需要不止一次,就把它作为一个类)。

它看起来像这样(这是Groovy,但它很容易翻译成Java或者你正在使用的任何东西:

new Label("<span style='font-size:small'>${StringEscapeUtils.escapeHtml4('&somesmalltext')}<span>").with{
    contentMode = ContentMode.HTML
    it
}

此处的关键是转义您的文字,将其包装在任何HTML中,并使用ContentMode.HTML作为Label

&#34;适当&#34;处理这个的方法只是有一个主题,添加你的:

 .v-label.small { font-size: small }

然后在你的标签上设置样式:

  myLabel.addStyleName("small")