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

Android 在Java中创建按钮会导致getLayoutParams返回null,android,button,size,layoutparams,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.set

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


如何调整按钮的大小?

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

它返回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,这应该可以工作。

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

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

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

嗨,Pixie,谢谢,我刚刚更新了我的问题-我尝试创建新的LayoutParams,但这会使我的应用程序崩溃。不清楚为什么你的应用程序会崩溃。因此,请提供logcat输出的stacktrace。嗨,Eric,谢谢-我刚刚更新了我的问题,请查看代码-我尝试使用new设置我的LayoutParams,但这会导致我的应用程序崩溃。在调用setListAdapter(适配器)后发生崩溃。您的应用程序在第2行和第3行崩溃。您请求的参数不存在,因此出现空指针异常。对不起,我没有正确更新我的问题,我已经更新了最后的代码部分,这仍然会导致我的应用程序在调用setListAdapter(adapter)时崩溃。没有调用setLayoutParams,它运行良好。感谢您的Edit2代码。。我复制并粘贴了它,但它仍然在setListAdapter(adapter)崩溃。没有对b.setLayoutParams的调用,它运行正常:s