获取TextView的高度

时间:2011-02-06 10:17:24

标签: java android textview

我有一些文字会放在TextView中。我是使用setText()完成的。

现在我需要找到TextView中文本占用的行数或高度。我尝试使用getHeight(),但它总是返回0.

无论如何要获得TextView中的文字高度?

2 个答案:

答案 0 :(得分:13)

因为仅在布局完成后才知道此大小,因此一种方法是创建自定义文本视图并使用onSizeChanged方法。另一种方式是:

    final TextView tv = (TextView) findViewById(R.id.myTextView);
    ViewTreeObserver vto = tv.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
            Toast.makeText(MyActivity.this, tv.getWidth() + " x " + tv.getHeight(), Toast.LENGTH_LONG).show();
            tv.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        } 
    }); 

我在此处找到此代码:How to retrieve the dimensions of a view?

答案 1 :(得分:6)

正如约翰所指出的,你将无法在setText之后立即获得高度。我不确定在TextView上使用getHeight()会对你有多大帮助。视图的高度不仅取决于视图中可见文本的高度,还取决于TextView所在的视图组/布局。如果视图组告诉TextView最大化高度,getHeight()将无处可见如果你等到文本呈现后。

我认为有很多方法可以做到:

  1. 子类TextView并覆盖onSizeChanged方法。在那里,调用supers onSizeChanged,然后通过getLineCount()获取TextView中的行数,使用getLineHeight()获取每行的高度。这可能会或可能不会比使用getHeight()更好,具体取决于您的布局或诸如此类的内容。
  2. 请勿使用Textviews尺寸。使用TextView.getPaint()获取TextViews Paint,然后从

    计算宽度和高度

    矩形边界; paint.getTextBounds(text,0,text.length(),bounds);

  3. 现在您将拥有范围内的尺寸。您现在可以使用paint.breakText来查看您在一行中可以容纳多少文本。可能是太麻烦了,并且没有保证(对于我未经训练的眼睛)与TextView使用的逻辑相同。