android中如何获取一个字符串占用的宽度(长度)

这里说的是一个字符串占用的空间大小,而不是字符串字符个数。

在安卓中,绘制一个字符串的方法是canvas.drawText()方法,但是这个方法用起来相当的麻烦,首先,他不能根据父容器宽度自动换行,如果你的字符串很长,他只会绘制一行字符串,不管是不是超出范围,因此,很多时候需要我们自己判断一个字符串的宽度。

我从日历calendar代码的dayview类中找到了实现这一功能的方法:

private int computeMaxStringWidth(int currentMax, String\[\] strings, Paint p) {
    float maxWidthF = 0.0f;
    int len = strings.length;
    for (int i = 0; i < len; i++) {
        float width = p.measureText(strings\[i\]);
        maxWidthF = Math.max(width, maxWidthF);
    }
    int maxWidth = (int) (maxWidthF + 0.5);
    if (maxWidth < currentMax) {
        maxWidth = currentMax;
    }
    return maxWidth;
}

这里面关键的是p.measureText()方法,他返回的应该是px为单位的int类型。

computeMaxStringWidth方法的第一个参数可以设置为0,出现在这里的原因是日历有些功能需要这个参数,其实是完全可以去掉的。