在TextView中获取文本的大小

时间:2011-07-18 14:15:30

标签: android android-layout textview text-size

将textView放在指定中心的x和y坐标上时遇到问题。 首先,我尝试在textView中设置文本,并使用视图的宽度和高度移动视图 from this link

但它不起作用,我想尝试别的东西。 我想知道是否有一种方法可以获得指定文本在textView中的大小? 我的意思是,我知道文本和textSize,我如何获得textView将采用的宽度和高度?

对于那些了解iPhone开发者的方法(NSString)sizeWithFont;

4 个答案:

答案 0 :(得分:78)

Rect bounds = new Rect();

textView.getPaint().getTextBounds(textView.getText().toString(), 0, textView.getText().length(), bounds);

bounds.width()将为您提供文本视图中文本的准确宽度。

答案 1 :(得分:62)

如果您的textview名为TV

TV.setText("bla");
TV.measure(0, 0);       //must call measure!
TV.getMeasuredHeight(); //get height
TV.getMeasuredWidth();  //get width

有关此内容的更多信息(已更新):How to get width/height of a View

答案 2 :(得分:10)

出于某种原因,Midverse Engineer的解决方案并没有给我总是正确的结果(至少在某些Android版本上)。 Sherif elKhatib的解决方案有效,但具有改变MeasuredWidth和Height的副作用。这可能导致textView的定位错误。

我的解决方案:

width = textView.getPaint().measureText(text);
metrics = textView.getPaint().getFontMetrics();
height = metrics.bottom - metrics.top;

答案 3 :(得分:0)

当您有多行文本和不同的填充时,使用TextView内部Paing类不是很热门。因此,停止尝试重新发明轮子。调用getMeasuredHeight后,请使用getMeasuredWidthmeasure(UNSPECIFIED, UNSPECIFIED)方法。只是不要忘记在帖子中获取新值,否则大多数情况下,您会得到错误的结果。

tv.setText(state.s);
tv.measure(UNSPECIFIED,UNSPECIFIED);
tv.post(new Runnable() {
    @Override
    public void run() {
       Log.d("tv","Height = "+tv.getMeasuredHeight());
       Log.d("tv","Width  = "+tv.getMeasuredWidth());
    }
});