Как программно задать размер кнопки = wrap_content?

Рейтинг: 0Ответов: 3Опубликовано: 07.11.2014

Всем доброго вечера пятницы! Подскажите, пожалуйста, как задать программно размер кнопки "Wrap_content"? Если для задания размера в пикселях проблем нет (btn1.setWidth(1)), то "wrapcontent" я не знаю как задать.

Ответы

▲ 4Принят

По-моему, как-то так:

Button button;
//findViewById(...)
ViewGroup.LayoutParams params = button.getLayoutParams();
params.width = LayoutParams.WRAP_CONTENT; // или в пикселях
button.setLayoutParams(params);
▲ 1
btn1.setLayoutParams(new LayoutParams(1, LayoutParams.WRAP_CONTENT));
▲ 1

В java все числа имеют знак (нету unsigned типов), так как размер элемента не может быть отрицательным, то отрицательные числа в переменной (отвечающей за размер) не используются. Потому в андроиде они используются для указания логического размера MATCH_PARENT и WRAP_CONTENT, то есть -1 и -2 соответственно. Однако указывать напрямую размер как -1 неудобно и непонятно (ищем в Инете термин "магические константы"), поэтому они объявлены в классе ViewGroup.LayoutParams как константы.

Для использования просто передавайте их как размер ViewGroup.LayoutParams.MATCH_PARENT.

Также напоминаю, что информация о том, как расположить элемент, хранится в объекте LayoutParams, который хранится внутри элемента, и у каждого лайоута LayoutParams свой со своими специфичными параметрами, но все они наследуются от ViewGroup.LayoutParams (и иногда от его потомков). Потому учитывайте, какой конкретно LayoutParams вы передаёте в элемент и в каком лайоуте реально находится ваш элемент.

Ну, для совершенствования почитайте http://startandroid.ru/ru/uroki/vse-uroki-spiskom.html