45

我在将 textView 放置在指定中心的 x 和 y 坐标时遇到问题。首先,我尝试在 textView 中设置文本,并从这个链接移动视图的宽度和高度 。

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

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

4

4 回答 4

97
Rect bounds = new Rect();

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

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

于 2014-05-28T22:41:53.967 回答
68

如果你的 textview 被称为 tv

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

更多信息(更新):如何获取视图的宽度/高度

于 2011-07-18T14:21:14.773 回答
14

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

我的解决方案:

width = textView.getPaint().measureText(text);
metrics = textView.getPaint().getFontMetrics();
height = metrics.bottom - metrics.top;
于 2016-04-21T13:44:32.900 回答
0

Paing当您有多行文本和不同的填充时,使用 TextView 内部类并不是那么热门。所以停止尝试重新发明轮子。调用后的使用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());
    }
});
于 2019-10-16T15:33:38.773 回答