在繪製文字的時候,不可避免的用到 FontMetrics
類和 Canvas#drawText()
方法,這裏詳細介紹下。
FontMetrics
先看下面這張圖:
FontMetrics Lines
圖中有五條線,自上而下分別是:
- top line: 文字可繪製區域最頂部的線;
- ascent line: 系統推薦的,文字可繪製區域頂部的線;
- baseline: 文字繪製的基線(在四線格上書寫英文字母時的第三條線);
- descent line: 系統推薦的,文字可繪製區域底部的線;
- bottom line: 文字可繪製區域最底部的線。
而 FontMetrics
類中有 [top, ascent, descent, bottom, leading]
字段,與上面 5 條線的關係是: FontMetrics對象中的字段值 = 對應線條的 Y 座標值 - baseline的 Y 座標值 ,如果用 Y(line A)
表示線條 A 的 Y 座標的話,那麼以下等式成立:
FontMetrics::top = Y(top line) - Y(baseline);
FontMetrics::ascent = Y(ascent line) - Y(baseline);
FontMetrics::descent = Y(descent line) - Y(baseline);
FontMetrics::bottom = Y(bottom line) - Y(baseline);
需要注意的是: 通常情況下,Android 中的 y 軸的正方向是沿屏幕向下的,也就是越往下 y 座標越大,所以 FontMetrics
的 top
和 ascent
值是負值, descent
和 bottom
的值是正值。
餘下的字段 leading
表示 系統推薦的行間距。
在實際開發中,通常使用 Paint
的 getFontMetrics()
獲得其對應的 FontMetrics
對象。
drawText()
繪製文字的時候,需要使用 Canvas
的 drawText(String text, float x, float y, Paint paint)
方法,其中的 text
表示 所需繪製的文字, paint
表示 畫筆,這很好理解,那麼 x
和 y
又是什麼呢?
這裏把 x
和 y
組成的點 (x, y)
稱作 基點,用於控制文字繪製的基準位置,而 Paint
中的 Align
對象指定文字對齊方式。 基點 和 Align 共同作用從而成功繪製文字。特別地是:基點的 Y 座標(也就是 y 值)其實就是前面提到的 baseline 的 Y 座標。
比如:上面圖中 baseline
上的黃點就是基點,可以觀察得出其對齊方式 Align
就是 CENTER
。
Sample
示例截圖:
FontMetrics Sample
GitHub: FontMetricsSample