1

我想以编程方式获取文本视图的高度或至少行数,但日志显示为 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());
}

感谢您的建议

4

3 回答 3

3

onCreate()中,您TextView没有布局通道,因此当前的宽度和高度为零。如果您想获得您的尺寸,有一些解决方案TextView

  1. 添加OnGlobalLayoutListener到您TextViewViewTreeObserver. (例如titreOff.getViewTreeObserver().addOnGlobalLayoutListener(listener)并在那里处理您的更改)。

  2. 通过覆盖(在其中您将拥有as 参数的尺寸)来覆盖TextView和处理您的特殊情况。onLayout()TextView

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

于 2012-07-16T13:58:27.957 回答
2

您的应用不知道TextViewwhile doingonCreate()方法的实际大小。解决方案是将您的输出移到此处:

onWindowFocusChanged(boolean hasFocus) {
    if (!hasFocus) {
        titreOff = (TextView) findViewById(R.id.offTitre);
        System.out.println(titreOff.getLineCount() + 
        " and " + titreOff.getHeight());
    }
}
于 2012-07-16T14:09:10.133 回答
1

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

相反,您应该 subclass TextView, overrideonSizeChanged()并且每次TextView更改大小时都会通知您。

于 2012-07-16T14:09:26.763 回答