Java 获取文本视图的高度

Java 获取文本视图的高度,java,android,textview,Java,Android,Textview,我有一些文本将放在TextView中。我使用setText()实现了这一点 现在我需要在TextView中找到文本所占的行数或高度。我尝试使用getHeight(),但它总是返回0 是否仍然可以获取TextView中文本的高度?因为只有在布局完成后才知道此大小,一种方法是创建自定义文本视图并使用onSizeChanged方法。另一种方式是: final TextView tv = (TextView) findViewById(R.id.myTextView); ViewTree

我有一些文本将放在
TextView
中。我使用
setText()
实现了这一点

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


是否仍然可以获取
TextView
中文本的高度?

因为只有在布局完成后才知道此大小,一种方法是创建自定义文本视图并使用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);
        } 
    }); 

我在这里找到了这样的代码:

正如John指出的,您无法在setText之后立即获得高度。我不确定在TextView本身上使用getHeight()会对您有多大帮助。视图的高度不仅取决于视图中可见文本的高度,还取决于TextView所在的视图组/布局。如果viewgroup告诉TextView最大化高度,则getHeight()将不起任何作用,即使您等到文本渲染之后

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

  • 子类TextView并覆盖onSizeChanged方法。在这里,调用supersonSizeChanged,然后通过getLineCount()获取TextView中的行数,并通过getLineHeight()获取每行的高度。这可能比使用getHeight()好,也可能不好,这取决于您的布局或其他
  • 不要使用文本视图维度。使用TextView.getPaint()获取TextViews绘制,然后从中计算宽度和高度

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


  • 现在,您将拥有边界中的维度。现在可以使用paint.breakText查看一行上可以容纳多少文本。可能太麻烦了,而且(在我未经培训的眼中)无法保证与TextView使用的逻辑相同。

    在渲染视图之前,无法获取视图的高度,这就是为什么在设置文本后检查高度时,总是返回0。为什么你需要知道高度?请解释更多你想要实现的目标。事实上,我已经开发了一个应用程序,可以一页一页地显示文本和图像(就像电子书阅读器一样)(我的意思是它不应该包含任何滚动条)。。所以,当我有大量的文本要放的时候,我需要知道文本在屏幕上占据了多少空间,这样它就可以放在屏幕上了..Kread。。你能举一些例子来说明如何对TextView进行子类化,以便在子类中使用主类中的TextView对象吗?好的,你有一个公共类MyText扩展了TextView{OVERRIDE METHODS HERE},在主类中你做了一个“MyText TextView=new MyText(this);”而不是“TextView TextView=new TextView(this);”。如果您想使用XML布局,我建议您阅读(实际上,即使是在Java中创建内容,也要阅读)。。但是onSizeChanged方法最终会被调用!!因此,在应用程序的中间不能使用GETLICANECUT!我是说。。如果我想用textview.getLineCount()初始化一个变量,即使在设置了textview.getLineCount()之后,变量值仍然是0,直到结束。上面代码的问题是。。文本视图的高度只能在代码末尾实现。。我不能把它放在中间!!我使用一个变量来存储高度,并在onGlobalLayout()中使用tv.getHeight()初始化该变量。。但变量的值始终为0,直到结束。。最后,它改变了文本的高度……这段代码帮助我找到了TextView的“宽度”和“高度”。