前言
自定义View中通过canvas.drawText()显示文本是,需要考虑文本的中心位置,因此需要计算文本的高度。
今天就记录一下文本绘制相关的注意事项,方便自己查阅。
正文
下面介绍一下获取高度和文本宽度等方法
FontMetrics
绘制文本,需要注意字体的基准线,如图
我们知道Android中的Paint.FontMetrics类中有封装相关属性:
- top:在一个大小确定的字体中,被当做最高字形,基线(base)上方的最大距离。
- ascent:单行文本中,在基线(base)上方被推荐的距离。
- descent:单行文本中,在基线(base)下方被推荐的距离。
- bottom:在一个大小确定的字体中,被当做最低字形,基线(base)下方的最大距离。
如果要计算文字的高度,可以使用descent-ascent
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(spToPixel(30.0f));//文字大小
paint.setColor(getResources().getColor(R.color.white));//文字颜色
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
//文字居中
mTextY = getHeight() * 1.0f / 2 + Math.abs((fontMetrics.ascent + fontMetrics.descent) / 2);
canvas.drawText(mText, 0, mText.length(), 0, mTextY, paint);
getTextBounds
String text = "笔友城堡-阅读是一种生活方式。高品质生活!";
Rect rect = new Rect();
mPaint.getTextBounds(text, 0, text.length(), rect);
int width = rect.width();
int height = rect.height();
参考文章
© 版权声明