Estoy tratando de calcular el ancho de un párrafo de texto de líneas múltiples. Que yo sepa, la única clase que puede hacer esto en Android es la clase StaticLayout (o DynamicLayout). Al usar esta clase, no obtengo la longitud adecuada de mi fragmento de texto, sino que las dimensiones medidas son a veces más pequeñas y, a veces, mayores según el tamaño del texto.¿Cómo determinar confiablemente el ancho de una cadena de varias líneas?
Así que, básicamente, estoy buscando una manera de medir de manera confiable el ancho de una cadena de texto de varias líneas.
La siguiente imagen muestra cómo el ancho medido difiere de la longitud del texto real en varios tamaños de texto.
La captura de pantalla se crea ejecutando el código siguiente en una vista personalizada:
@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);
}
}
¿Has probado 'Paint.measureText()'? – neevek
http://stackoverflow.com/questions/7549182/android-paint-measuretext-vs-gettextbounds – nullpotent
@Neevek produce el mismo resultado, pero en la parte superior no es capaz de medir texto de varias líneas. – Moritz