Android字體度量(FontMetrics)


基本概念
字體的度量,是指對於指定字號的某種字體,在度量方面的各種屬性,其描述參數包括:

    baseline:字符基線
    ascent:字符最高點到baseline的推薦距離
    top:字符最高點到baseline的最大距離
    descent:字符最低點到baseline的推薦距離
    bottom:字符最低點到baseline的最大距離
    leading:行間距,即前一行的descent與下一行的ascent之間的距離

參照下面這些圖來幫助理解上述概念:
              



相關屬性獲取與調整
1. 字符屬性參數
     API中的Paint.FontMetrics(Int)類,定義了字符的ascent、top、descent和bottom,可以用來獲取對應字符的相應參數,如下表:
Fields
public float     ascent     The recommended distance above the baseline for singled spaced text.
public float     bottom     The maximum distance below the baseline for the lowest glyph in the font at a given text size.
public float     descent     The recommended distance below the baseline for singled spaced text.
public float     leading     The recommended additional space to add between lines of text.
public float     top     The maximum distance above the baseline for the tallest glyph in the font at a given text size.
     注意,以上獲取到的屬性值,是相對於baseline的坐標值,而不是距離值。
     字體的高度可以通過descent+Math.abs(ascent)計算得到。字符串的寬度可以通過Paint.measureText("xxxx")得到。注意,如果所選字體為等寬字體,則每個字符的寬度相等,如果非等寬字體,則字符寬度並不相同。
     字符串的實際可視高度和寬度,即最小包圍框則可以通過Paint.getTextBounds()或者TextView.getLineBounds()獲得。

2. 行間距(leading)
     對於TextView的行間距調整設置,可以使用 setLineSpacing(add, mult) 方法,或者在布局文件中使用屬性 lineSpacingExtra 或者 lineSpacingMultiplier 進行定義。
     對於Paint繪制的Text的行間距調整,可以使用Paint.fontMetrics中的 leading 屬性字段進行定義。

3. 行高
     字符所在行的高度 = ascent + descent + leading,即字符的高度+行間距,可以通過descent+Math.abs(ascent) + leading計算得到。
     對於TextView中的行高,可以直接通過getLineHeight()方法獲取。

4. 字符間距(kerning)
     對於textView 和 Paint繪制的Text,可以分別使用各自類中的 getLetterSpacing() 和 setLetterSpacing() 方法獲取和設置字符間距,對於TextView還可以在布局文件中使用屬性 letterSpacing 進行定義。
     注意以上的方法和屬性是在API 21引入的,對於之前的版本,只能通過 SpannableString類 及相應的方法來間接調整。



參考與閱讀
0. Code-GitHub

1. Android開發者文檔--android.graphics.Paint.FontMetrics
2. Android開發者文檔--android.graphics.Paint.FontMetricsInt
3. Android開發者文檔--android.widget.TextView
4. Android開發者文檔--android.graphics.Paint
5. Android開發者文檔--android.text.SpannableString
6. Android字符串進階之三:字體屬性及測量(FontMetrics)

7. style the android fonts styles with leading and tracking
8. How to adjust text kerning in Android TextView(API 21 之前版本,SpannableString方法)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM