複数行テキストの段落の幅を計算しようとしています。私の知る限り、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 );
}
}