【发布时间】:2012-06-01 14:45:05
【问题描述】:
我正在尝试计算多行文本段落的宽度。据我所知,在 Android 中唯一可以做到这一点的类是 StaticLayout(或 DynamicLayout)类。使用此类时,我没有得到正确的文本 sn-p 长度,而是测量的尺寸有时更小,有时更大,具体取决于文本大小。
所以我基本上是在寻找一种可靠地测量多行文本字符串宽度的方法。
下图显示了在各种文本大小下测量的宽度与实际文本长度的差异。
屏幕截图是在自定义视图中运行以下代码创建的:
@Override
protected void onDraw( Canvas canvas ) {
for( int i = 0; i < 15; i++ ) {
int startSize = 10;
int curSize = i + startSize;
paint.setTextSize( curSize );
String text = i + startSize + " - " + TEXT_SNIPPET;
layout = new StaticLayout( text,
paint,
Integer.MAX_VALUE,
Alignment.ALIGN_NORMAL,
1.0f,
0.0f,
true );
float top = STEP_DISTANCE * i;
float measuredWidth = layout.getLineMax( 0 );
canvas.drawRect( 0, top, measuredWidth, top + curSize, bgPaint );
canvas.drawText( text, 0, STEP_DISTANCE * i + curSize, paint );
}
}
【问题讨论】:
-
你试过
Paint.measureText()吗? -
@Neevek 它产生相同的结果,但最重要的是它无法测量多行文本。
-
@AljoshaBre 我知道这个问题。我很久以前在底部添加了一个帖子。不过,提出的解决方案不适用于多行文本。
-
怎么不适用?只需将宽度相加即可。在我看来
getTextBounds()有效。查看接受的答案,测量(红色矩形)看起来正确。
标签: android