3 回答

TA貢獻(xiàn)1803條經(jīng)驗 獲得超6個贊
我的經(jīng)驗是,getTextBounds將返回封裝文本的絕對最小邊界矩形,而不一定是渲染時使用的測量寬度。我還想說measureText假設(shè)一行。
為了獲得準(zhǔn)確的測量結(jié)果,您應(yīng)該使用它StaticLayout來渲染文本并拉出測量結(jié)果。
例如:
String text = "text";
TextPaint textPaint = textView.getPaint();
int boundedWidth = 1000;
StaticLayout layout = new StaticLayout(text, textPaint, boundedWidth , Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
int height = layout.getHeight();

TA貢獻(xiàn)1828條經(jīng)驗 獲得超13個贊
這里是對真正問題的描述:
簡單的簡單回答是沒有開始的Paint.getTextBounds(String text, int start, int end, Rect bounds)回報。也就是說,要獲得將通過使用getTextBounds()中的相同 Paint對象調(diào)用而設(shè)置的文本的實際寬度,您應(yīng)該添加Rect的左側(cè)位置。像這樣的東西:Rect(0,0)Canvas.drawText(String text, float x, float y, Paint paint)
public int getTextWidth(String text, Paint paint) {
Rect bounds = new Rect();
paint.getTextBounds(text, 0, end, bounds);
int width = bounds.left + bounds.width();
return width;
}
注意這一點bounds.left- 這是問題的關(guān)鍵。
通過這種方式,您將獲得與使用時相同的文本寬度Canvas.drawText()。
并且相同的功能應(yīng)該是獲取height文本:
public int getTextHeight(String text, Paint paint) {
Rect bounds = new Rect();
paint.getTextBounds(text, 0, end, bounds);
int height = bounds.bottom + bounds.height();
return height;
}
Ps:我沒有測試這個確切的代碼,但測試了這個概念。
- 3 回答
- 0 關(guān)注
- 864 瀏覽
添加回答
舉報