2012-01-04 2 views
2

A ToggleButton виджет изменяет размер, когда выбранное состояние переключается. Например, если значение textOn является «истинным», а значение «textOff» «не обязательно меня перезвонить позже», переключатель «Проверенный статус» приводит к существенному изменению ширины кнопки.Как установить ширину ToggleButton в более широкие значения textOn и textOff?

Было бы неплохо установить ширину ToggleButton максимум на две ширины, покрытые содержимым, созданные textOn и textOff.

Есть ли предпочтительный способ поддержания постоянной ширины ToggleButton? Лучший способ просто позвонить getWidth(), затем toggle(), затем getWidth() еще раз?

ответ

2

Поскольку его кнопка с двумя строками не вредит предоставлению ширины в самом XML в соответствии с большей строкой.

Но если вы хотите, чтобы вычислить ширину строк, это просто:

Paint paint = toggleButton.getPaint(); 
float length = paint.measureText(YOUR_STRING); 

Это дает ширину строки, которое потребуется на экране. Теперь установите ширину кнопки переключения через LayoutParams.

Предположим, что родительский макет вашей кнопки переключения - LinearLayout.
поэтому он должен выглядеть так:
toggleButton.setLayoutParams (новые LayoutParams (WIDTH_YOU_CALCULATED, LinearLayout.LayoutParams.WRAP_CONTENT));

Это установит ширину и высоту вашего ToggleButton на то, что вы рассчитали.

+0

Я отредактировал свой ответ, посмотрим, поможет ли он. – akkilis

3

Мне нужно было это для моей кнопки переключения и немного улучшилось. Я удалил настройки макета и включил прокладку. Если вы не учитываете прописку, ваша строка будет обернута внутри кнопки.

ToggleButton tglBtn = (ToggleButton) view.findViewById(R.id.toggleBtn); 
    tglBtn.setWidth((int) tglBtn.getPaint().measureText("Longest String")+tglBtn.getPaddingLeft()+tglBtn.getPaddingRight()); 
+0

Я хотел бы отметить, что текст с наибольшим количеством символов (самая длинная строка) не обязательно является текстом с наибольшей шириной; См., Например, 'iiiiiii' против' MMMM'. – Thorbear