最近在自定义View中绘制文字的时候遇到需要测量文字的情况,查了一些资料,写下以备用。
API介绍
FontMetrics API.PNG
字体有6个参数:
baseline
ascent
bottom
descent
leading
top
baseline
基线的定义
The invisible line where all characters sit.
Definition: In typography, the baseline is the imaginary line upon which a line of text rests. In most typefaces, the descenders on characters such as g or p extend down below the baseline while curved letters such as c or o extend ever-so-slightly below the baseline. The baseline is the point from which other elements of type are measured including x-height and leading. The baseline is also significant in the alignment of drop caps and other page elements.
In typography and penmanship, the baseline is the line upon which most letters “sit” and below which descenders extend.
In the example to the right, the letter ‘p’ has a descender; the other letters sit on the (red) baseline.
Most, though not all, typefaces are similar in the following ways as regards the baseline:
capital letters sit on the baseline. The most common exceptions are the J and Q.
Lining figures (see Arabic numerals) sit on the baseline.
The following text figures have descenders: 3 4 5 7 9.
The following lowercase letters have descenders: g j p q y.
Glyphs with rounded lower extents (0 3 5 6 8 c C G J o O Q U) dip very slightly below the baseline (“overshoot”) to create the optical illusion that they sit on the baseline. Peter Karow’s Digital Typefaces suggests that typical overshoot is about 1.5%.
The vertical distance of the base lines of consecutive lines in a paragraph is also known as line height or leading, although the latter can also refer to the baseline distance minus the font size.
基线是一条想象的线包裹着一个字符的上下两端,但不包裹字符的“下摆”。
ascent
baseline到字体顶部的距离。
bottom
一个或多个字符中的最低的字符到baseline的距离,也可以视作所有字符的descent值的最大值。
descent
字符自baseline以下到最低处的距离。
leading
行距,可以理解为当前行的所有字符的最低处到下一行字符的顶部的距离。
top
一个或多个字符中的最高处字符到baseline的距离,也可以视作所有字符的ascent的最大值。
文字各属性示例1
获取文字高度
文字各属性示例2
文字各属性示例3
文字各属性示例4
文字各属性示例5
文字各属性示例6
方法一:
// 此方法没有计算leadingPaint paint = new Paint();// 设置字体大小paint.setTextSize(xxx);int height = paint.descent() - paint.ascent();
方法二:
Paint paint = new Paint();// 设置字体大小paint.setTextSize(xxx);// 设置字体paint.setTypeface(Typeface.xxx); Paint.FontMetrics fontMetrics = paint.getFontMetrics();float height1 = fontMetrics.descent - fontMetrics.ascent + fontMetrics.leading;// height2测得的高度可能稍微比height1高一些float height2 = fontMetrics.bottom - fontMetrics.top + fontMetrics.leading;
测量文字宽度
Paint paint = new Paint(); String str = "xxx";// 设置字体大小paint.setTextSize(xxx);// 文字的宽度float strWidth = paint.measureText(str);
通过文字所在的矩形区域获得宽和高(不如measureText方法得到的值精确)
Paint paint = new Paint(); String str = "xxx"; Rect rect = new Rect();// 参数1:需要测量的字符串// 参数2:需要测量的字符串的第一个字符的索引// 参数3:需要测量的字符串的最后一个字符的索引+1,通常是需要测量的字符串的长度// 参数4:Rect对象paint.getTextBounds(str, 0, str.length(), rect);// 文字的宽度int width = rect.width();// 文字的高度int height = rect.height();
参考:
1.Baseline
2.Android字符串进阶之三:字体属性及测量(FontMetrics)
作者:enGrave93
链接:https://www.jianshu.com/p/02efd3fa431e
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
共同学习,写下你的评论
评论加载中...
作者其他优质文章