Android中FontMetrics的几个属性全面讲解

 更新时间:2016年11月07日 09:13:11   投稿:jingxian  
下面小编就为大家带来一篇Android中FontMetrics的几个属性全面讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

今天和大家聊一聊Android中关于FontMetrics的几个属性的理解,在Android中用画笔绘制文字时,文字最终的大小是和绘制文字的字体的类型和字体的大小是相关的。

设置字体类型 Paint.setTypeface(Typeface typeface)

设置字体大小 Paint.setTextSize(float textSize)

Paint.FontMetrics有5个属性,并且这5个属性都是跟字体相关的,下面是官方API文档的解释:


翻译一下他的意思:

1. 基准点是baseline

2. Ascent是baseline之上至字符最高处的距离

3. Descent是baseline之下至字符最低处的距离

4. Leading文档说的很含糊,其实是上一行字符的descent到下一行的ascent之间的距离

5. Top指的是指的是最高字符到baseline的值,即ascent的最大值

6. 同上,bottom指的是最下字符到baseline的值,即descent的最大值

网上还有另一种翻译方式:

top: 字体中字符超出基线之上的最大距离

bottom: 字体中字符超出基线之下的最大距离

ascent: 单个字符超出基线之上的推荐距离

descent: 单个字符超出基线之上的推荐距离

leading: 标准行间距

其实翻译完之后还是很难理解具体是什么意思,所以我找来下面几个图认识一下:


注意,以上获取到的属性值,是相对于baseline的坐标值,而不是距离值。

字体的高度可以通过descent+Math.abs(ascent)计算得到。字符串的宽度可以通过Paint.measureText("xxxx")得到。注意,如果所选字体为等宽字体,则每个字符的宽度相等,如果非等宽字体,则字符宽度并不相同。

字符串的实际可视高度和宽度,即最小包围框则可以通过Paint.getTextBounds()或者TextView.getLineBounds()获得,如下图所示:


Paint.getTextBounds

这个方法获取字符[字符串]占据的矩形区域,意为字体可见部分的矩形区域

Rect bound = new Rect();

mPaint.getTextBounds(text, 0, text.length(), bound);

bound.right - bound.left //得到的就是字符[字符串]的可见部分矩形区域的宽度

Paint.measureText(text)

返回的是字符[字符串]的宽度,注意与

bound.right - bound.left相互区分.

因为通常来说每个字符两边都会留有一部分空白区域,便于阅读.所以measureText的尺寸通常会大于bound.right - bound.left.所以,对于单个字符来说:

measureText = bound.right - bound.left + 字符两边的留白宽度

下面再来说一说行高的计算方式:

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

其实到这里理不理解都没有关系,在平常的开发中主要会用到获取字符或字符串宽度和高度,我们只需要知道他们的获取方式即可

宽度获取方法:Paint.measureText(text)

高度获取方法:descent+Math.abs(ascent)

以上所说都是个人理解,欢迎大家吐槽纠正!

以上这篇Android中FontMetrics的几个属性全面讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Broadcast实现Android组件间的通信

    使用Broadcast实现Android组件间的通信

    这篇文章主要为大家详细介绍了使用Broadcast实现Android组件间的通信,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android 8.0安装apk的实例代码

    Android 8.0安装apk的实例代码

    本文给大家分享了Android 8.0安装apk的实例代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2018-03-03
  • Android设置Activity背景为透明style的简单方法(必看)

    Android设置Activity背景为透明style的简单方法(必看)

    下面小编就为大家带来一篇Android设置Activity背景为透明style的简单方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • android音频编辑之音频裁剪的示例代码

    android音频编辑之音频裁剪的示例代码

    本篇文章主要介绍了android音频编辑之音频裁剪的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Android仿微信语音消息的录制和播放功能

    Android仿微信语音消息的录制和播放功能

    这篇文章主要介绍了Android仿微信语音消息的录制和播放功能,需要的朋友可以参考下
    2017-09-09
  • Android中Handler实现倒计时的两种方式

    Android中Handler实现倒计时的两种方式

    本篇文章主要介绍了Android中Handler实现倒计时的两种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Android实现志愿者系统详细步骤与代码

    Android实现志愿者系统详细步骤与代码

    这篇文章主要介绍了Android实现志愿者系统,本系统采用MVC架构设计,SQLite数据表有用户表、成员表和活动表,有十多个Activity页面。打开应用,进入欢迎界面,3s后跳转登录界面,用户先注册账号,登录成功后进入主界面
    2023-02-02
  • Android实时文件夹创建方法

    Android实时文件夹创建方法

    这篇文章主要介绍了Android实时文件夹创建方法,涉及基于Activity实现文件实时查询的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • Android自定义控件深入学习 Android生成随机验证码

    Android自定义控件深入学习 Android生成随机验证码

    这篇文章主要再次为大家介绍了Android自定义控件,以及针对自定义view学习,实战演练了Android生成随机验证码的详细过程,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Android利用Xfermode剪裁圆角

    Android利用Xfermode剪裁圆角

    这篇文章主要为大家详细介绍了Android利用Xfermode剪裁圆角,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论