我有一些文字会放在TextView
中。我使用setText()
来做到这一点。获取TextView的高度
现在我需要找到文本在TextView
中占用的行数或高度。我试过使用getHeight()
,但它总是返回0.
是否有无论如何获得TextView
中存在的文本的高度?
我有一些文字会放在TextView
中。我使用setText()
来做到这一点。获取TextView的高度
现在我需要找到文本在TextView
中占用的行数或高度。我试过使用getHeight()
,但它总是返回0.
是否有无论如何获得TextView
中存在的文本的高度?
正如约翰指出,你将不能够的setText后,立即得到了高度。我不确定在TextView上使用getHeight()会对你有多大的帮助。视图的高度不仅取决于视图中可见文本的高度,还取决于TextView所在的视图组/布局。如果视图组告诉TextView最大化高度,getHeight()将使您无法获得任何位置如果你等到文字被渲染后。
我看到许多方面是可以这样做:
请勿使用Textviews维度。使用TextView.getPaint()获取TextViews Paint,然后从
计算宽度和高度Rect bounds; paint.getTextBounds(text,0,text.length(),bounds);
您现在将有尺寸在边界内。您现在可以使用paint.breakText来查看您将在一行中放入多少文本。可能太多的麻烦,并没有保证(对我的未经训练的眼睛)与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);
}
});
这段代码我在这里找到:How to retrieve the dimensions of a view?
我想我可以从这里得到一些有用的东西.. thnq .. – 2011-02-06 17:37:57
在渲染完成之前,您无法获取视图的高度,这就是为什么您在设置文本后检查高度时始终返回0的原因。你为什么需要知道身高?请详细解释你正在努力实现的目标。 – 2011-02-06 11:30:40
实际上,我开发了一个应用程序,它可以逐页显示文本和图像(就像电子书阅读器一样)(我的意思是它不应该包含任何滚动条)。所以,当我有大量的文本要放,我需要知道文本在屏幕上占有多少,以便它适合屏幕.. – 2011-02-06 13:34:32