我试图在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)
出现此错误的原因是什么?
答案 0 :(得分:2)
为什么要在onDraw中添加TextView?没有充分的理由这样做,它将具有可怕的性能并且不是必需的。如果要在onDraw中绘制文本,请使用canvas.drawText()。如果要添加textView,请在正常位置执行。在渲染中不要这样做,应用程序的一部分需要尽可能快。你的onDraw应该尽可能避免创建对象,更不用说创建像View一样重量级的东西了。
此外,尝试添加该视图 - 您没有做对。您必须将其添加到父视图,然后让该父布局。在新的它不是View层次结构的一部分后,它就不会被绘制到屏幕上。您遇到的具体崩溃是因为它尚未添加到视图层次结构中,因此它没有布局参数。但是不要试图解决这个问题 - 只是不要在这里添加View,使用drawText或在其他地方添加View。