2011-09-14 8 views
9

Quiero crear un lector de texto, que cortará el texto y lo colocará en el TextView (representa mis páginas) y uno después del otro. Estos están contenidos en un ViewFlipper (representa todo mi texto), lo que me permite pasar las páginas.Android: ¿Cómo puedo saber cuántos textos pueden caber en mi textView (mi página)?

Por contra No puedo cortar mi texto de forma inteligente. Por ahora, limito cada TextView a una cantidad de caracteres, pero es muy inestable. De hecho, algunas cartas ocupan más espacio que otras. No podemos usar este método.

¿Cómo podemos saber qué cantidad de texto ingresará en un TextView?

He intentado encontrar el tamaño máximo de mi Vista manualmente. Invoqué en:

float test = view.getPaint().measureText(myString); 

Funciona bien. Cuando coloco 480 letras (0 y 1), llego a 14,400 y mi texto está completamente dentro de la pantalla. Con:

1 -> 12.0 
0 -> 12.0 
é -> 11.0 
\n -> 13.0 
\r -> 7.0 

totales para llenar la página -> 14400

El problema es que los saltos de línea y retorno de carro están causando problemas.

Si solo tengo letras o números en mi cadena, todo bien: si respetamos el tamaño máximo de 14,400, todo se muestra en la pantalla. ¡No hay problema!

Por contra, si una línea se rompe o un retorno de carro, no funciona. Incluso si respetamos el límite de 14400, el texto anterior no se muestra por completo.

Esto se debe a que el método "measureText";.." Sólo devuelve 13 para un salto de línea Pero es raro, un salto de línea debe representar al menos el 480 para que sea coherente

Cómo hacer los editores de libros electrónicos (luna lector, Aldiko +) para el texto con formato a ser tan bueno? Cada página tiene la misma altura, el texto termina en el mismo lugar ..

+0

¿Te encontrar alguna solución? – Arslan

Respuesta

2

puede fijar el número de líneas en su TextView añadiendo android:maxLines="some_integer". La otra forma es esta:

if (myTextView.getMeasuredWidth() < myTextView.getPaint().measureText(myText)) { 
    myTextView.setHorizontalFadingEdgeEnabled(true); 
    myTextView.setHorizontallyScrolling(true); 
} 

Pero esto agregará efecto nublado al último carácter si el texto es demasiado largo.

+0

Gracias pero no puedo usar su código. El "getMeasuredWidth" no parece apropiado. Ella regresa 0 cada vez. Gracias por "myTextView.getPaint(). MeasureText (myText)" es exactamente lo que necesito. Ahora solo necesito un método para determinar la capacidad máxima de mi Vista. "getMeasuredWidth" no devuelve nada. – 118218

+0

Sí, pero el punto más extraño es que este código siempre funciona bien. – superM

+0

¿Estás tratando de hacer esto en la onCreate de una actividad? – blessenm

0

Antes de conseguir medido anchura o la altura de llamadas por debajo método:

anyview.measure(0,0); 

sin llamar a este método a todos los salarios conseguir 0 value para height y width

+0

Y vea que necesita alto y ancho debe inflarse desde XML o anemically a través del código. –

Cuestiones relacionadas