问题
代码中手动添加布局设置属性出现空指针:
java.lang.NullPointerException: Attempt to write to field ‘float android.widget.LinearLayout$LayoutParams.weight’ on a null object reference
代码:
// 创建父容器
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
// 创建TextView
TextView textView = new TextView(this);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) textView.getLayoutParams();
// 设置权重
layoutParams.weight = 1;
textView.setText("TextView");
textView.setBackground(getDrawable(R.drawable.ic_launcher_background));
textView.setLayoutParams(layoutParams);
// 将textView添加进linearLayout
linearLayout.addView(textView);
// 将linearLayout设置为页面布局
setContentView(linearLayout);
问题在于: LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) textView.getLayoutParams();
该行代码用于获取父容器的布局参数,可是此时textView还没有添加进LinearLayout中,所以执行getLayoutParams()出现空指针异常。
解决方法:先将textView添加进LinearLayout中,再设置textView属性。
// 创建父容器
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
// 创建TextView
TextView textView = new TextView(this);
// 将textView添加进linearLayout
linearLayout.addView(textView);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) textView.getLayoutParams();
// 设置权重
layoutParams.weight = 1;
textView.setText("TextView");
textView.setBackground(getDrawable(R.drawable.ic_launcher_background));
textView.setLayoutParams(layoutParams);
// 将linearLayout设置为页面布局
setContentView(linearLayout);