欢迎来到代码驿站!

Android代码

当前位置:首页 > 移动开发 > Android代码

Android获取文字高度的三种方法

时间:2021-07-14 07:57:11|栏目: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 这几个文字中,三个单词的高度是不同的。

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

所以,三者的高度是不同的。如何获取这三个高度呢?就是通过 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

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

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 表示行间距。

总结

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

上一篇:解决Android启动APP的一瞬间系统栏会变成蓝色问题

栏    目:Android代码

下一篇:Android中Spinner控件之键值对用法实例分析

本文标题:Android获取文字高度的三种方法

本文地址:http://www.codeinn.net/misctech/157105.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有