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

 更新时间:2021年01月05日 09:50:57   作者:muboluo  
这篇文章主要给大家介绍了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 表示行间距。

总结

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

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

相关文章

  • android实现线程间通信的四种常见方式

    android实现线程间通信的四种常见方式

    线程通信相信大家都不陌生了,但是你知道几种方法呢,本文主要介绍了android实现线程间通信的四种常见方式,分享给大家,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Android整理需要翻译的strings资源详情

    Android整理需要翻译的strings资源详情

    这篇文章主要介绍了Android整理需要翻译的strings资源,文章主要列出所有res目录,根据是否包含values-ru分成两组解绍,需要的朋友可以参考一下
    2021-10-10
  • 详解android 中文字体向上偏移解决方案

    详解android 中文字体向上偏移解决方案

    这篇文章主要介绍了详解android 中文字体向上偏移解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Android源码学习之组合模式定义及应用

    Android源码学习之组合模式定义及应用

    将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性,需要了解的朋友可以参考下
    2013-01-01
  • Android应用程序四大组件之使用AIDL如何实现跨进程调用Service

    Android应用程序四大组件之使用AIDL如何实现跨进程调用Service

    Android应用程序的四大组件中Activity、BroadcastReceiver、ContentProvider、Service都可以进行跨进程,Android系统采用了远程过程调用(RPC)方式来实现跨进程调用服务(Service),对于Service的跨进程调用需要通过AIDL来实现,关于如何实现aidl service请看本文介绍
    2015-10-10
  • Android实现热门标签的流式布局

    Android实现热门标签的流式布局

    这篇文章主要介绍了Android实现热门标签的流式布局的详细方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • Android模拟器实现手机添加文件到sd卡的方法

    Android模拟器实现手机添加文件到sd卡的方法

    这篇文章主要介绍了Android模拟器实现手机添加文件到sd卡的方法,详细分析了Android模拟器添加文件到sd卡的步骤与相关技巧,需要的朋友可以参考下
    2016-06-06
  • Android实现 EditText输入手机号空格功能

    Android实现 EditText输入手机号空格功能

    这篇文章主要介绍了Android实现 EditText输入手机号空格功能,实现思路是要重写TextWatcher,每次EditText内容变化,都判断内容是否符合要求,具体实例代码大家参考下本文
    2018-02-02
  • Fragment通过FragmentManager实现通信功能详细讲解

    Fragment通过FragmentManager实现通信功能详细讲解

    这篇文章主要介绍了Fragment通过FragmentManager实现通信功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • 详解Android MVP开发模式

    详解Android MVP开发模式

    这篇文章主要为大家介绍了Android MVP开发模式的相关资料,需要的朋友可以参考下
    2016-01-01

最新评论