Pri*_*off 7 java performance android textview text-size
Paint类中有一个方法:Paint.getTextBounds()返回Rect
某些文本占用的内容.但根据这个答案,它会返回与TextView的宽度/高度不同的东西.
Q1:有没有办法Rect
通过Paint.getTextBounds()返回TextView的宽度和高度?
注意,我确实需要精确地知道宽度/高度.我很高兴知道rect
可能的错误大约2-3%的上限,但它必须不大(并且应该适用于任何不依赖于屏幕分辨率和像素密度的手机)然后TextView界限
Q2:有没有其他QUICK方法用指定的textSize确定某些文本的宽度和高度?
我知道,宽度可以由Paint.measureText()确定,但这不会返回高度.高度可以通过创建new StaticLayout
with text然后调用StaticLayout.getHeight()来确定,但这太慢了.我需要更快的东西.
所有这一切的背景是AutoFitTextView
通过向上或向下缩放文本大小自动将文本放入其边界内,并且它应该快速完成,因为很多这样AutoFitTextView
的动态会很快动态变化.
Pri*_*off 10
找到一种简单而不慢的方法来确定Paint
使用不具体的特定文本宽度/高度StaticLayout
.
public int getTextWidth(String text, Paint paint) {
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
int width = bounds.left + bounds.width();
return width;
}
public int getTextHeight(String text, Paint paint) {
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
int height = bounds.bottom + bounds.height();
return height;
}
Run Code Online (Sandbox Code Playgroud)
技巧的简短描述:不从的开始Paint.getTextBounds(String text, int start, int end, Rect bounds)
返回.也就是说,要获得将通过使用相同对象调用而设置的文本的实际宽度,应添加左侧位置.Rect
(0,0)
Canvas.drawText(String text, float x, float y, Paint paint)
Paint
getTextBounds()
Rect
注意这一点bounds.left
- 这是问题的关键.
通过这种方式,您将获得与使用时相同的文本宽度Canvas.drawText()
.
在这个答案中给出了更详细的解释.