将textView放在指定中心的x和y坐标上时遇到问题。 首先,我尝试在textView中设置文本,并使用视图的宽度和高度移动视图 from this link
但它不起作用,我想尝试别的东西。 我想知道是否有一种方法可以获得指定文本在textView中的大小? 我的意思是,我知道文本和textSize,我如何获得textView将采用的宽度和高度?
对于那些了解iPhone开发者的方法(NSString)sizeWithFont;
。
答案 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
后,请使用getMeasuredWidth
和measure(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());
}
});