android 测量字体宽高,Android文字尺寸的测量

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

API介绍

AAffA0nNPuCLAAAAAElFTkSuQmCC

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的最大值。

AAffA0nNPuCLAAAAAElFTkSuQmCC

文字各属性示例1

获取文字高度

AAffA0nNPuCLAAAAAElFTkSuQmCC

文字各属性示例2

AAffA0nNPuCLAAAAAElFTkSuQmCC

文字各属性示例3

AAffA0nNPuCLAAAAAElFTkSuQmCC

文字各属性示例4

AAffA0nNPuCLAAAAAElFTkSuQmCC

文字各属性示例5

AAffA0nNPuCLAAAAAElFTkSuQmCC

文字各属性示例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();

作者:enGrave93

链接:https://www.jianshu.com/p/02efd3fa431e

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值