Android:myTextView.getLineCount()/ getHeight()= 0?

时间:2012-07-16 13:50:12

标签: android textview getline

我想以编程方式获取文本视图的高度或至少行数,但日志显示为0.错误是什么?这是我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_off);

    titreOff = (TextView) findViewById(R.id.offTitre);
    titreOff.setText("some text"); // displays 2 lines of text with the font size I used
    System.out.println(titreOff.getLineCount() + " and " + titreOff.getHeight());
}

感谢您的建议

3 个答案:

答案 0 :(得分:3)

onCreate()中,您的TextView没有布局通行证,因此目前的宽度和高度为零。如果您想获得TextView

的尺寸,可以使用一些解决方案
  1. OnGlobalLayoutListener的{​​{1}}添加TextView。 (例如ViewTreeObserver并在那里处理您的更改。)

  2. 覆盖titreOff.getViewTreeObserver().addOnGlobalLayoutListener(listener)并通过覆盖TextView(您将onLayout()的尺寸作为参数来处理您的特殊情况。

  3. 或者,您的测量的最终目标是什么?如果你能给出一些细节,可能会有比这更简单的解决方案。

答案 1 :(得分:2)

您的应用在执行TextView方法时不知道onCreate()的实际大小。解决方案是在此处移动输出:

onWindowFocusChanged(boolean hasFocus) {
    if (!hasFocus) {
        titreOff = (TextView) findViewById(R.id.offTitre);
        System.out.println(titreOff.getLineCount() + 
        " and " + titreOff.getHeight());
    }
}

答案 2 :(得分:1)

setText()不会立即更新TextView,它会使其无效。新文本将仅在下次重绘时设置。如果你在获得旧高度之前试图获得高度。

相反,您应该创建TextView的子类,覆盖onSizeChanged(),每当TextView的大小发生变化时,您都会收到通知。