0

我需要在 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,它运行良好,但我的按钮大小不正确。

如何调整按钮的大小?

4

3 回答 3

0

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

于 2011-06-01T19:50:15.450 回答
0

它返回 null 因为当您以编程方式创建小部件时,它没有布局参数!(直到您将其添加到视图中,它才会从 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,这应该可以工作。

于 2011-06-01T19:52:47.787 回答
0

因为我是通过 ListView::addFooterView 添加这个按钮的,所以我不得不使用 ListView 类型。

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

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

于 2011-06-02T04:50:00.593 回答