標籤:android 自訂view 測量文字尺寸
FontMetrics
可以測量高度
關於FontMetrics的幾個重要屬性的解析
1.ascent
2.descent
3.top
4.bottom
5.leading
6.baseline 理解這個是重點 可以理解為是X軸
注意 android 座標系的特點 Y軸 向下是正方向 向上是負方向
關於 baseline 的確定 在自訂 view 的時候
通過 drawText 這個方法 將 文字 繪製到介面
其中 這個方法的 第二個 和 第三個 參數就決定了baseline的位置
理解這幾個參數最好的方式就是通過英語的 四線格 那個。
通過實際的測量發現其實這幾個屬性 之間的關係其實是固定的 與具體的書寫內容沒有關係 與字型大小有關係 (針對英文)
baseline 的位置 相當於 四線中 第三條線
ascent 的位置相當於 四線中 有 f 的時候 他是固定在 f 的最上方
descent 的位置 相當於 四線中 有 g 的時候 他是固定在 g 的最下方
top 的位置相當於 baseline 到四線最上麵線的位置
bottom 的位置 相當於 baseline 到四線最下麵線的位置
(看見好多人說 top 是 ascent的最大值,bottom 是 descent 的最大值。通過測試我覺得這個說法不是很好,不過最後還是看自己理解了)
所以關於測量文字的高度只需要 descent- ascent (座標系演算法)
Paint 提供了倆個方法
1.ascent()
2.descent()
所以可以通過 mPaint.ascent()+ mPaint.descent() 擷取文字高度
上面介紹了通過FontMetrics來擷取文字的高度,下面介紹擷取文字 的寬度。
擷取文字的寬度就很簡單了。只不過是有一個地方需要注意一下即可。
Paint 提供了一個方法
measureText()
通過這個方法即可以輕鬆的擷取到文字的的寬度
需要注意的是 關於 Paint 的擷取 (TextView)
通過getPaint(); 得到 Paint 再去 通過 measureText(); 這個方法去擷取文字的寬度即可
要是在自訂View 中 可以通過 Paint 直接調用measureText(); 這個方法去擷取文字的寬度
下面在介紹一種方法可以同時擷取文字的寬度和高度
Paint提供了一個方法
getTextBounds()
這個方法需要提供一個參數 Rect 矩形地區,這個方法將文字的地區傳遞到 Rect
Rect 提供了倆個方法
width(); 可以得到文字的寬度
height(); 可以得到文字 的高度
不過這倆個方法最終得到的是int 類型的值在精度上面已經不準確了。
點擊開啟連結
android 文字尺寸(寬高)的測量