在onDraw上添加TextView时出现NullPointer异常

时间:2017-08-20 05:39:11

标签: android android-layout android-custom-view

我试图在myCustomView类的onDraw方法中添加textview。所以,如果我这样做,它没有任何问题,

tv = new TextView(context);
tv.setTextSize(14); 
tv.layout(left, top, right, bottom);
tv.setGravity(Gravity.CENTER);  
tv.setText(text);
canvas.save(); 
canvas.translate(left, top);
tv.draw(canvas);

但我不想在onDraw中实例化TextView。因此,如果我在(onDraw)外部初始化TextView,例如在类构造函数中,则此代码可以正常工作。它给了我以下错误,

  

java.lang.NullPointerException:尝试从字段' int中读取   android.view.ViewGroup $ LayoutParams.width'在null对象引用上                                                                                在android.widget.TextView.checkForRelayout(TextView.java:8447)                                                                                在android.widget.TextView.setText(TextView.java:5378)                                                                                在android.widget.TextView.setText(TextView.java:5234)                                                                                在android.widget.TextView.setText(TextView.java:5191)

出现此错误的原因是什么?

1 个答案:

答案 0 :(得分:2)

为什么要在onDraw中添加TextView?没有充分的理由这样做,它将具有可怕的性能并且不是必需的。如果要在onDraw中绘制文本,请使用canvas.drawText()。如果要添加textView,请在正常位置执行。在渲染中不要这样做,应用程序的一部分需要尽可能快。你的onDraw应该尽可能避免创建对象,更不用说创建像View一样重量级的东西了。

此外,尝试添加该视图 - 您没有做对。您必须将其添加到父视图,然后让该父布局。在新的它不是View层次结构的一部分后,它就不会被绘制到屏幕上。您遇到的具体崩溃是因为它尚未添加到视图层次结构中,因此它没有布局参数。但是不要试图解决这个问题 - 只是不要在这里添加View,使用drawText或在其他地方添加View。