源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-03-05 05:40 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android中FontMetrics的几个属性全面讲解
今天和大家聊一聊Android中关于FontMetrics的几个属性的理解,在Android中用画笔绘制文字时,文字最终的大小是和绘制文字的字体的类型和字体的大小是相关的。 设置字体类型 Paint.setTypeface(Typeface typeface) 设置字体大小 Paint.setTextSize(float textSize) Paint.FontMetrics有5个属性,并且这5个属性都是跟字体相关的,下面是官方API文档的解释:
[img]http://files.jb51.net/file_images/article/201611/20150401132508731.png[/img]
[b]翻译一下他的意思:[/b] 1. 基准点是baseline 2. Ascent是baseline之上至字符最高处的距离 3. Descent是baseline之下至字符最低处的距离 4. Leading文档说的很含糊,其实是上一行字符的descent到下一行的ascent之间的距离 5. Top指的是指的是最高字符到baseline的值,即ascent的最大值 6. 同上,bottom指的是最下字符到baseline的值,即descent的最大值 [b]网上还有另一种翻译方式:[/b] top: 字体中字符超出基线之上的最大距离 bottom: 字体中字符超出基线之下的最大距离 ascent: 单个字符超出基线之上的推荐距离 descent: 单个字符超出基线之上的推荐距离 leading: 标准行间距 其实翻译完之后还是很难理解具体是什么意思,所以我找来下面几个图认识一下:
[img]http://files.jb51.net/file_images/article/201611/20150401132535332.png[/img]
注意,以上获取到的属性值,是相对于baseline的坐标值,而不是距离值。 字体的高度可以通过descent+Math.abs(ascent)计算得到。字符串的宽度可以通过Paint.measureText("xxxx")得到。注意,如果所选字体为等宽字体,则每个字符的宽度相等,如果非等宽字体,则字符宽度并不相同。 字符串的实际可视高度和宽度,即最小包围框则可以通过Paint.getTextBounds()或者TextView.getLineBounds()获得,如下图所示:
[img]http://files.jb51.net/file_images/article/201611/201611070906144.png[/img]
[b]Paint.getTextBounds[/b] 这个方法获取字符[字符串]占据的矩形区域,意为字体可见部分的矩形区域 Rect bound = new Rect(); mPaint.getTextBounds(text, 0, text.length(), bound); bound.right - bound.left //得到的就是字符[字符串]的可见部分矩形区域的宽度 Paint.measureText(text) 返回的是字符[字符串]的宽度,注意与 [b]bound.right - bound.left相互区分.[/b] 因为通常来说每个字符两边都会留有一部分空白区域,便于阅读.所以measureText的尺寸通常会大于bound.right - bound.left.所以,对于单个字符来说: measureText = bound.right - bound.left + 字符两边的留白宽度 [b]下面再来说一说行高的计算方式:[/b] 字符所在行的高度 = ascent + descent + leading,即字符的高度+行间距,可以通过descent+Math.abs(ascent) + leading计算得到。对于TextView中的行高,可以直接通过getLineHeight()方法获取。 其实到这里理不理解都没有关系,在平常的开发中主要会用到获取字符或字符串宽度和高度,我们只需要知道他们的获取方式即可 宽度获取方法:Paint.measureText(text) 高度获取方法:descent+Math.abs(ascent) 以上所说都是个人理解,欢迎大家吐槽纠正! 以上这篇Android中FontMetrics的几个属性全面讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部