2015-04-01 1 views
0

Скажем, у меня есть ярлык:Как изменить размер шрифта метки в ваадине в удобном для макета режиме?

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

(где _ любимая функция локализации).

Я бы хотел, чтобы он был меньше обычного. Поскольку нет одноранговой метод Ярлык для выполнения этого я должен прибегнуть к добавлению «сырые» правила CSS, например так:

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

Это единственный вид работ. Да, текст : меньше, но когда страница сначала построена, Vaadin определяет размер этикетки так, как если бы шрифт был обычного размера. Когда что-то заставляет страницу перерисовываться/переписываться, Ваадин понимает, что происходит, и дает правильный размер этикетке.

Это заставляет страницу «прыгать» заметно, так как этикетка становится как короче, так и не столь высокой.

Как я могу обойти это?

+0

Почему бы не использовать тему? вы можете быть уверены, что стиль там, и в браузере не должно быть мерзких хикбоксов. – cfrick

+0

@cfrick Если использование темы означает, что этого не произойдет, я приму это в качестве ответа, даже если конкретный подход недоступен мне – badp

+0

, то, возможно, поместите это как отредактировать в свой вопрос (который вы не можете использовать темы (почему не btw?)), поэтому может быть выпущен какой-то действительный ответ на вашу проблему – cfrick

ответ

2

Поскольку ваша ситуация кажется отчаянной, а темы не являются вариантом, вы можете просто обернуть содержимое для ярлыка в HTML (сделайте его классом, если вам это нужно более одного раза).

Это будет выглядеть примерно так (это Groovy, но это легко перевести на Java или что вы используете:

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

Ключевым моментом здесь является, чтобы избежать текста, завернуть его в любом HTML, . и использовать ContentMode.HTML для Label

«правильный» способ справиться с этим просто, чтобы иметь тему, добавить свой:

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

там, а затем установите стиль на вашей табличке:

myLabel.addStyleName("small") 
+0

Что такое строка «it» в первом кодебло? – badp

+0

игнорировать его. он просто возвращает ярлык «он» сам. 'with' - это какой-то« карточный »ублюдок» в отличном стиле. – cfrick

Смежные вопросы