Android Canvas 添加文本 Text
canvas.drawText(text, x, y, paint);
其中坐标 (x, y)
是默认是文字的坐下角
- canvas.drawTextRun() 带上下文
- canvas.drawTextOnPath() 沿着路径绘制,满足一些特殊需求
以上绘制不能实现自动换行和到 View 边界自动换行,需要自动换行的可以使用 StaticLayout
辅助 如果你需要进行多行文字的绘制,并且对文字的排列和样式没有太复杂的花式要求,那么使用 StaticLayout 就好。想要绘制比较花哨或者类似富文本的样式,就要使用 canvas.drawText
边计算边绘制了。
字体样式相关的都在 Pain 中
- 大小: setTextSize
- 字体: setTypeface
- 是否使用伪粗体: setFakeBoldText
- 删除线: setStrikeThruText
- 下划线: setUnderlineText
- 倾斜: setTextSkewX
- 缩放: setTextScaleX/Y
- 字符间距: setLetterSpacing
- 对齐: setTextAlign,即
(x, y)
坐标中的 x 是文字的左边、中间,还是右边 - 语言地区: setTextLocale (不同地区的同一个字样子可能不一样。)
textSize != textHeight
文字测量
Paint
文字的左右和上下边距
- 行距:paint.getFontSpacing()
- ascent / descent: Paint.ascent() 和 Paint.descent()
- 显示范围: getTextBounds(String text, int start, int end, Rect bounds),紧贴文字可见的边框。
- 文字宽度 measureText, 获取的是字符串的有效宽度,字符显示的间距,其实有字符所占的宽度往往比显示的范围大一些。
- 每个字符的宽度: getTextWidths(String text, float[] widths) 并把结果填入参数 widths.
- breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) 给定宽度显示,测量文字的宽度,并且范围给定宽度能够显示字符的数量。measureForwards 表示文字的测量方向,true 表示由左往右测量;maxWidth 是给出的宽度上限;measuredWidth 是用于接受数据,而不是用于提供数据的:方法测量完成后会把截取的文字宽度(如果宽度没有超限,则为文字总宽度)赋值给 measuredWidth[0]。
- 光标位置: getRunAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, int offset)
FontMetircs.getFontMetrics()
文字的几条线
- baseline: 不用计算,文字的坐标的位置。 其余几个尺寸都是相对于 baseline 的距离,在 baseline 上方的为负值,下方的为正值。
- scent / descent: 文字的建议限制范围,一般是在这个边界内。他们是相对 baseline 的相对位移
- top / bottom: 字体范围
- leading: 下一行的 top 和 该行的 bottom 之间的距离。
bottom - top + leading 的结果是要大于 getFontSpacing() 的返回值的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论