今天来介绍三种获取文字宽度的方法,并且我们将结果进行一个对比
public class CustomView extends View {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
String content = "你不是真正的快乐";
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setColor(Color.GREEN);
paint.setTextSize(20);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText(content,50,50,paint);
//第一种方式,//measureText
// float width = paint.measureText(content);
// System.out.println("=======width: "+width);//160
//第二种方式,
// Rect bounds = new Rect();;
// paint.getTextBounds(content,0, content.length(),bounds);
// int width = bounds.width();
// System.out.println("=======width: "+width);//159
//第三种
int width = getTextWidth(content);
System.out.println("=======width: "+width);//160
}
public int getTextWidth(String content){
int width = 0;
if(content!=null&&content.length()>0){
int length = content.length();
float[] widths = new float[length];
paint.getTextWidths(content,widths);
for (int i = 0; i < length; i++) {
width += (int)Math.ceil(widths[i]);
}
}
return width;
}
}
总结:获取文字宽度有三种方法
1.调用paint的measureText方法
2.获取文字所在矩形,然后获取宽度
3.调用paint的getTextWidths从一个和文字长度相等的数组中计算文字宽度。
从最后的结果可以看出,第一种和第三种都是160,第二种是159,偏差很小,实际开发中还是建议使用第一种,方法比较简单,而且结果可能更精确。