Android字体度量(FontMetrics)

本文介绍了Android中字体度量FontMetrics的关键概念,包括字符基线、字符的推荐和最大距离,以及行间距的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

字体的度量,是指对于指定字号的某种字体,在度量方面的各种属性,其描述参数包括:
  • baseline:字符基线
  • ascent:字符最高点到baseline的推荐距离
  • top:字符最高点到baseline的最大距离
  • descent:字符最低点到baseline的推荐距离
  • bottom:字符最低点到baseline的最大距离
  • leading:行间距,即前一行的descent与下一行的ascent之间的距离
参照下面这些图来帮助理解上述概念:
                 



相关属性获取与调整

1. 字符属性参数
     API中的 Paint.FontMetrics(Int)类,定义了字符的ascent、top、descent和bottom,可以用来获取对应字符的相应参数,如下表:
Fields
public float ascent The recommended distance above the baseline for singled spaced text.
public float bottom The maximum distance below the baseline for the lowest glyph in the font at a given text size.
public float descent The recommended distance below the baseline for singled spaced text.
public float leading The recommended additional space to add between lines of text.
public float top The maximum distance above the baseline for the tallest glyph in the font at a given text size.
     注意,以上获取到的属性值,是相对于baseline的坐标值,而不是距离值。
     字体的高度可以通过 descent+Math.abs(ascent)计算得到。字符串的宽度可以通过 Paint.measureText("xxxx")得到。注意,如果所选字体为等宽字体,则每个字符的宽度相等,如果非等宽字体,则字符宽度并不相同。
     字符串的实际可视高度和宽度,即最小包围框则可以通过 Paint.getTextBounds()或者 TextView.getLineBounds()获得。

2. 行间距(leading)
     对于TextView的行间距调整设置,可以使用 setLineSpacing(add, mult) 方法,或者在布局文件中使用属性 lineSpacingExtra 或者 lineSpacingMultiplier 进行定义。
     对于Paint绘制的Text的行间距调整,可以使用Paint.fontMetrics中的 leading 属性字段进行定义。

3. 行高
     字符所在行的高度 = ascent + descent + leading,即字符的高度+行间距,可以通过 descent+Math.abs(ascent) + leading计算得到。
     对于TextView中的行高,可以直接通过getLineHeight()方法获取。

4. 字符间距(kerning)
     对于textView 和 Paint绘制的Text,可以分别使用各自类中的 getLetterSpacing() 和 setLetterSpacing() 方法获取和设置字符间距,对于TextView还可以在布局文件中使用属性 letterSpacing 进行定义。
     注意以上的方法和属性是在 API 21引入的,对于之前的版本,只能通过  SpannableString类 及相应的方法来间接调整。



参考与阅读



8.  How to adjust text kerning in Android TextView(API 21 之前版本,SpannableString方法)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值