在Java中创建一个按钮会导致getLayoutParams返回null

时间:2011-06-01 19:47:21

标签: android button size layoutparams

我需要在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返回null。

即使我创建了新的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 :(得分:0)

如果您想从按钮获取LayoutParams,则必须将此按钮添加到视图中。或者只是创建新的LayoutParams并进行设置。

答案 1 :(得分:0)

它返回null,因为当您以编程方式创建窗口小部件时,它没有布局参数! (直到将其添加到视图中,然后它从LayoutManager接收默认值)

编辑:上面是指代码的第3行

将它们设置为:

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

Edit2:这是一些readybake替换代码。

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,这应该可行。

答案 2 :(得分:0)

因为我是通过ListView :: addFooterView添加此按钮,所以我必须使用ListView类型。

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

使用它而不仅仅是LayoutParams可以解决我的崩溃问题。希望这有助于其他人。