在android中获取文本宽度的最有效方法是什么?

时间:2014-05-11 18:43:15

标签: android

我需要检测适合(宽度,高度)的文本的最大文本大小。获取文本大小值的最快方法是什么?

我尝试在for循环中迭代文本大小并获取Paint.getTextBounds()但是它需要花费很多时间并且整个调用需要几秒钟。油漆字体为Typeface.MONOSPACE,当char宽度相等时,它有助于节省时间。文本大小和字符宽度之间是否存在依赖关系以避免调用Paint.getTextBounds()?该任务非常类似于为match_parent宽度和高度获取TextView的文本大小,所以有人知道如何快速完成吗?

1 个答案:

答案 0 :(得分:0)

因为您使用Typeface.MONOSPACE,所以您不必为每个字符或每个文字大小计算文本范围。

假设您有变量paint,其文本大小设置为12以便开始。您想要使用文字填充widthheight区域。现在

Rect initialBounds = new Rect();
paint.getTextBounds(" ", 0, 1, initialBounds);
float initialTextSize = 12, increase = 2, currentSize = 12;
int charCount = text.length();//the char count we want to print
int maxCharCount = 0;//max count of chars we can print at currentSize.
do{
    currentSize += increase;
    float charWidth = initialBounds.right * currentSize / initialTextSize;
    float charHeight = initialBounds.bottom * currentSize / initialTextSize;
    int charPerLine = width / charWidth;
    int lineCount = height / charHeight;
    maxCharCount = charPerLine * lineCount;
}
while(maxCharCount > charCount);
currentSize -= increase;//this is the size we are looking for.

之后,您只需致电paint.setTextSize(currentSize);并绘制文字。

我没有测试代码,但它应该可行。如果您还希望能够在必要时将文本大小减小到初始文本大小以下,则需要进行一些修改。