为了账号安全,请及时绑定邮箱和手机立即绑定

Android文字尺寸的测量

标签:
Android

最近在自定义View中绘制文字的时候遇到需要测量文字的情况,查了一些资料,写下以备用。

API介绍

FontMetrics API.PNG

字体有6个参数:

  1. baseline

  2. ascent

  3. bottom

  4. descent

  5. leading

  6. 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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消