前言

自定义View中通过canvas.drawText()显示文本是,需要考虑文本的中心位置,因此需要计算文本的高度。

今天就记录一下文本绘制相关的注意事项,方便自己查阅。

正文

下面介绍一下获取高度和文本宽度等方法

FontMetrics

绘制文本,需要注意字体的基准线,如图

Android文本绘制高宽获取

我们知道Android中的Paint.FontMetrics类中有封装相关属性:

  1. top:在一个大小确定的字体中,被当做最高字形,基线(base)上方的最大距离。
  2. ascent:单行文本中,在基线(base)上方被推荐的距离。
  3. descent:单行文本中,在基线(base)下方被推荐的距离。
  4. 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();

参考文章

  1. Android绘制文本之获取宽高笔记
  2. 自定义View文本居中问题

相关文章

暂无评论

none
暂无评论...