说我有一个标签:
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会意识到正在发生的事情,并为标签提供正确的大小。
这会导致页面显着“跳跃”,因为标签变得更短而且不够高。
我该如何解决这个问题?
答案 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")