3 回答
![?](http://img1.sycdn.imooc.com/5458692c00014e9b02200220-100-100.jpg)
TA贡献1803条经验 获得超6个赞
我的经验是,getTextBounds将返回封装文本的绝对最小边界矩形,而不一定是渲染时使用的测量宽度。我还想说measureText假设一行。
为了获得准确的测量结果,您应该使用它StaticLayout来渲染文本并拉出测量结果。
例如:
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();
![?](http://img1.sycdn.imooc.com/545847aa0001063202200220-100-100.jpg)
TA贡献1828条经验 获得超13个赞
这里是对真正问题的描述:
简单的简单回答是没有开始的Paint.getTextBounds(String text, int start, int end, Rect bounds)回报。也就是说,要获得将通过使用getTextBounds()中的相同 Paint对象调用而设置的文本的实际宽度,您应该添加Rect的左侧位置。像这样的东西: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- 这是问题的关键。
通过这种方式,您将获得与使用时相同的文本宽度Canvas.drawText()。
并且相同的功能应该是获取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 关注
- 834 浏览
添加回答
举报