android 获取默认字体,Android获取文字高度的三种方法

前言

本文是对获取文字高度整理和总结,参考资料源自 statcoverflow的一个回答。具体参看下面的参考链接

获取文字高度的三个方法

paint.getTextBounds(String text, int start, int end, Rect bounds)

paint.getFontMetrics()

StaticLayout

1 paint.getTextBounds(String text, int start, int end, Rect bounds)

参数解释

text : 被测量的文字

start: 被测量文字的起始位置

end: 被测量文字的终止位置,最大为文字的长度

rounds: 被测量文字

功能解释

如果我们想要获取一段string的精确高度,我们可以通过 paint.getTextBounds()方法来实现。

精确高度是指什么?举例来说,下面的 Happy new year 这几个文字中,三个单词的高度是不同的。

高度等于最上面一个像素减去最下面一个像素的高度。

73275968c29854a639ed755c4c248abf.png

所以,三者的高度是不同的。如何获取这三个高度呢?就是通过 paint.getTextBounds()方法。

String temp = "Happy"; //被获取的文字

Rect rect = new Rect();

Paint paint = new Paint();

paint.getTextBounds(temp, 0, temp.length(), rect);

int height = rect.height();

得到的height 就是我们目标文字的最终高度。

但是需要注意的是,上面的到的Happy, new, year 这三个单词的高度是不同的。

如果我们想将上面三个单词处理成同一个高度,该怎么办呢?

2 paint.getFontMetrics()

功能解释

paint.getFontMetrics() 帮助我们获取一段文字中字体的高度,注意这里说的是字体。使用这个方法,获取一段文字的高度都是相同的。

这里,fm中几个属性需要注意一下 我们先来看下面这张图。注意图中的 line1 line2 line3

ca4c5a942f777f5b97c909ca247ddcbe.png

其中 line 1 表示 Ascent;line2 表示baseline;line3 表示 Decent。 下面的截图中是我在一个demo中获取的一段文字的高度。

434470ebb9ad66d711329aa6cf363db4.png

Ascent的值 和 Decent的值都是相对于baseLine而言的。从baseLine出发,向上为负,向下为正。

demo代码如下:

Paint paint = new Paint();

Paint.FontMetrics fm = paint.getFontMetrics();

float height1 = fm.descent - fm.ascent;

float height2 = fm.bottom - fm.top + fm.leading;

其中 height1 表示文字的高度, height2表示行高。注意这两者的区别。fm.leading 表示行间距。

总结

到此这篇关于Android获取文字高度的三种方法的文章就介绍到这了,更多相关Android获取文字高度内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程!

参考资料:stackoverflow.com/questions/3…

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值