我通过重写TextView来自定义一个控件,需要得到文本绘制出来后有多高。单行文本很好得到,但不知道多行文本如何测量整体。谢谢各位了。
------解决思路----------------------
行高×计算出的行数,就能算出高度了
protected String[] getTextLines(String text, float fontSize, float boundWidth) {
if (StringHelper.isNullOrEmpty(text)) {
return new String[0];
}
Paint p = getPaint();
if (p == null)
p = new Paint();
p.setTextSize(fontSize);
float wid = boundWidth;
String[] lines = text.split("\n");
ArrayList<String> drawLines = new ArrayList<String>();
StringBuilder stringBuilder = new StringBuilder();
for (String str : lines) {
stringBuilder.delete(0, stringBuilder.length());
float[] charWidths = new float[str.length()];
p.getTextWidths(str, charWidths);
float w = 0;
for (int i = 0; i < str.length(); i++) {
float len = charWidths[i];
w += len;
if (w >= wid) {
drawLines.add(stringBuilder.toString());
stringBuilder.delete(0, stringBuilder.length());
w = 0;
}
stringBuilder.append(str.charAt(i));
}
if (stringBuilder.length() > 0) {
drawLines.add(stringBuilder.toString());
}
}
String[] outLines = new String[drawLines.size()];
for (int i = 0; i < drawLines.size(); i++) {
outLines[i] = drawLines.get(i);
}
return outLines;
}
//-------------------------------------------------------------------
paint.setTextSize(fontSize);
Paint.FontMetrics metrics = paint.getFontMetrics();
float fontHeight = metrics.bottom - metrics.top;
float lineHeight = fontHeight + lineSpan; //行高