Создание кнопки в Java приводит к тому, что getLayoutParams возвращает ноль - PullRequest
0 голосов
/ 01 июня 2011

Мне нужно создать кнопку на Java.Ниже приведен мой код:

 Button b = new Button(MyClass.this);
 b.requestLayout();
 LayoutParams lp = b.getLayoutParams();
 lp.height = LayoutParams.WRAP_CONTENT;
 lp.width = LayoutParams.WRAP_CONTENT;
 b.setLayoutParams(lp);
 b.setText("bla");
 b.setTextSize(16);
 b.setOnClickListener(myListener);

Затем я добавляю эту кнопку в конец ListView:

 getListView().addFooterView(b);

Однако это происходит сбой, потому что getLayoutParams возвращает ноль.

Даже если я создаю новые LayoutParams вместо getLayoutParams, то есть:

 Button b = new Button(MyClass.this);
 LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
 b.setLayoutParams(lp); 
 b.setText("bla");
 b.setTextSize(16);
 b.setOnClickListener(myListener);

, приложение завершает работу.Без setLayoutParams он работает нормально, но моя кнопка имеет неправильный размер.

Как мне определить размер моей кнопки?

Ответы [ 3 ]

0 голосов
/ 01 июня 2011

Возвращается ноль, потому что когда вы программно создаете виджет, у него нет параметров макета! (Пока вы не добавите его в представление, оно будет получать значения по умолчанию от LayoutManager)

изменить: выше относится к строке 3 вашего кода

Установите их так:

TextView moneyTV = new TextView(this);
LayoutParams lp1 = new LayoutParams(HeightParamHere, WidthParamHere, WeightParamHere);
moneyTV.setLayoutParams(lp1);

Edit2: вот некоторый готовый код замены.

Button b = new Button(MyClass.this);
b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
b.setText("bla");
b.setTextSize(16);
b.setOnClickListener(myListener);

Если вы определили myListener, это должно сработать.

0 голосов
/ 02 июня 2011

Поскольку я добавляю эту кнопку через ListView :: addFooterView, оказывается, что мне пришлось использовать тип ListView.

 b.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.WRAP_CONTENT, ListView.LayoutParams.WRAP_CONTENT));

Использование этого вместо LayoutParams разрешает мой сбой. Надеюсь, что это помогает другим.

0 голосов
/ 01 июня 2011

Вы должны добавить эту кнопку в представление, если хотите получить LayoutParams от кнопки. Или просто создайте новый LayoutParams и установите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...