我在将 textView 放置在指定中心的 x 和 y 坐标时遇到问题。首先,我尝试在 textView 中设置文本,并从这个链接移动视图的宽度和高度 。
但这不起作用,我想尝试其他方法。我想知道是否有一种方法可以获取指定文本在我的 textView 中的大小?我的意思是,我知道文本和 textSize,如何获得 textView 的宽度和高度?
类似于(NSString)sizeWithFont;
那些了解 iPhone 开发者的方法。
我在将 textView 放置在指定中心的 x 和 y 坐标时遇到问题。首先,我尝试在 textView 中设置文本,并从这个链接移动视图的宽度和高度 。
但这不起作用,我想尝试其他方法。我想知道是否有一种方法可以获取指定文本在我的 textView 中的大小?我的意思是,我知道文本和 textSize,如何获得 textView 的宽度和高度?
类似于(NSString)sizeWithFont;
那些了解 iPhone 开发者的方法。
Rect bounds = new Rect();
textView.getPaint().getTextBounds(textView.getText().toString(), 0, textView.getText().length(), bounds);
bounds.width()
将为您提供文本视图中文本的准确宽度。
如果你的 textview 被称为 tv
tv.setText("bla");
tv.measure(0, 0); //must call measure!
tv.getMeasuredHeight(); //get height
tv.getMeasuredWidth(); //get width
更多信息(更新):如何获取视图的宽度/高度
由于某种原因,Midverse Engineer 的解决方案并不总是给我正确的结果(至少在某些 Android 版本上)。Sherif elKhatib 的解决方案有效,但具有改变 MeasuredWidth 和 Height 的副作用。这可能会导致 textView 的定位不正确。
我的解决方案:
width = textView.getPaint().measureText(text);
metrics = textView.getPaint().getFontMetrics();
height = metrics.bottom - metrics.top;
Paing
当您有多行文本和不同的填充时,使用 TextView 内部类并不是那么热门。所以停止尝试重新发明轮子。调用后的使用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());
}
});