最近接触的项目里,有自定义文字控件的内容,在onDraw的时候需要用canvas画到画布上,这就牵扯到测量文字的宽度和高度(主要是文字的坐标)了,首先,先去这个网址学习一下关于文字的相关知识,输入链接说明,讲的很好。 测量文字有几种方法,下面就单独拿出来说一下: 首先是横坐标:
//获取文字所在区域的长方形,textContent是文字内容
Rect lRect = new Rect();
textPaint.getTextBounds(textContent,0,textContent.length(),lRect);
//用控件所占区域的长方形的宽度,减去文字所在的长方形的跨度,一半的位置就是文字开始的X坐标
int baseLineX = getMeasuredWidth()/2-lRect.width()/2;
接下来是纵坐标:
//对于汉字来说,纵坐标并不固定,原因我还没有找到,各个尺寸手机上的,居中会有微小的尺寸差异
//有一种较为普遍的计算Y坐标的方式,就是
//如果baseline对齐的话:底端的Y坐标是:(行高-字体高度)/2+字体高度,但是字符串并不居中,经过测试 //如果:(行高-字体高度)/2+字体高度-6 ,就稍微居中了一点。
//代码如下:
int baseline = (getMeasuredHeight() - (-fontMetrics.ascent + fontMetrics.descent)) /
2+fontMetrics.descent-fontMetrics.ascent+6;
为了解决文字的坐标问题,在网上看了不少文章,有一些感觉有以下问题,比如这篇,[输入链接说明](http://blog.csdn.net/hursing/article/details/18703599),最后确定文字的Y坐标的时候,输入的参数是targetRect.centerX(),centerX这个参数就是在屏幕中的坐标,这个要格外注意