Android 文字测量

Posted by hurshi on 2019.04.17

文字的对齐

  1. 将文字的对齐,必须知道 paint 的属性,如下图所示:(查看示例地址,自己运行下就能搞清楚这些线条了)

  2. 上图中,除了baseline,其他的都是 paint 的成员变量,而baseline是由使用者自己定义的,其中 TextView 就有 定义 baseline 成员变量

  3. 其中top,bottom,ascent,descent都是paint属性,它们的坐标永远都是相对 baseline 而言的(对于 paint 而言,baseline 永远都是0),所以我们在绘制文字(canvas.drawText)的时候,Y坐标是对准 baseline 的。想要正确显示文字,在Y坐标上肯定需要一定的偏移量。

  4. paint.getTextBounds()获取到的是文字的绝对外框,文字的变动(比如a->b,c->A)都会导致 TextBounds 发生变化,因为ab的高度不一样,所以ab的 TextBounds 高度也是不一样的,宽度也一样。

  5. 文字对齐点为:水平可以Gravity指定,默认Left; 垂直方向为Baseline。如下图红色点为默认对齐点:

    注意:文字在垂直方向并不是底部对齐的,而是对准文字的Baseline

绘制多行自动换行文字

  • 使用StaticLayout就能解决问题啦,很智能的

  • 使用 paint.breakText(text...)可以解锁更多自定义姿势,比如图文混排等效果。

  • DEMO 效果图:

    ImageTextView HollowTextView

参考