Я пытаюсь вычислить ширину многострочного абзаца текста. Насколько я знаю, единственным классом, который может это сделать в Android, является класс StaticLayout (или DynamicLayout). При использовании этого класса я не получаю надлежащую длину моего фрагмента текста, но измеренные размеры иногда меньше и иногда больше в зависимости от размера текста.
Итак, я в основном ищу способ надежного измерения ширины многострочной текстовой строки.
На следующем рисунке показано, как измеренная ширина расходится с фактической длиной текста в разных размерах текста.
Создается скриншот, запускающий следующий код в пользовательском представлении:
@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 );
}
}