2012-02-03 17 views
11

Estoy creando un lector de libros electrónicos para Android. El contenido de un ebook a menudo se divide en archivos html (epub) con uno o más capítulos en ellos.Presentar contenido html como "páginas" dinámicas

Estoy planeando construir un lector de libros electrónicos que divida el contenido de esos archivos en diferentes "páginas". El problema es saber cuántos textos "encajan" en una página y calcular la cantidad correcta de páginas, ya que eso depende de una serie de factores diferentes, como: tamaño de fuente, tamaño de palabra, párrafos, imágenes, saltos de página , titulares, etc.

Lo ideal sería tener mi texto justificado y seleccionable, y como eso no es posible con TextView o EditText normal, debo usar un WebView no desplazable.

Para resumir, ¿cómo puedo "medir" la cantidad de texto que cabe en una "página" en mi WebView? ¿O hay un mejor enfoque diferente para resolver esto? Vi que la clase Paint es compatible con measure text y breakText.

Gracias!

+0

Repensaría seriamente la idea de configurar el texto justificado, ya que se sabe que es menos legible: http://www.newsletterfillers.com/archives/design/justified_ragged.htm –

Respuesta

7

Nota: Esta respuesta no utiliza la vista web como su superficie de visualización.

Puede usar el Canvas para dibujar cada página. El lienzo le da su altura & ancho con el que puede dibujar cada línea en el lienzo usando drawText basado en el ancho & altura disponible.

Básicamente puede calcular cuántas letras pueden caber en una línea, tomar tantas palabras, teniendo cuidado de no dividir ninguna palabra y seguir dibujando el texto.

Si divide las tareas para utilizar diferentes trabajadores para cada párrafo, también puede hacerlo rápidamente.

+0

usar lienzo me impide seleccionar texto y tener justificación para ello:/ – Richard

+2

Puedes resolver eso también. puede mantener un mapa de qué char es dónde en la pantalla ... puede seguir el diálogo de selección de uers [ahora también puede ser un rectángulo] y voltear los colores de texto entre esas coordenadas para mostrar que están seleccionados. funciona, pero debería funcionar :). –

3

Tal vez usted puede hacerlo de esta manera

  • texto se añade y representan dentro de WebView

  • En vista Web, puede utilizar Javascript para inspeccionar el estado actual de las mediciones de los árboles y extracto de DOM como anchura y la altura de los elementos individuales

  • Javascript se comunica de nuevo el tamaño de la página de nuevo a creador WebView a través de algunos de devolución de llamada

  • Cuando Javascript detecta que se supera el umbral de tamaño de página envía una señal para un salto de página necesita

hace Android Kindle HTML5 salto de página con Javascript por lo que es definitivamente posible.

+0

Intenté llenar un div dentro de mi página web html hasta que se sobrelleno usando esta función, pero su dead slow:/http: // stackoverflow.com/questions/143815/how-to-determine-using-javascript-if-html-element-has-overflowing-content – Richard

+0

Esa respuesta particular no es muy inteligente. Hay muchísimas formas de optimizarlo y Kindle puede hacer todo el paginado del libro en JS. –

+0

Por ejemplo, opere en párrafos u oraciones en lugar de caracteres o palabras individuales. –

1

Eche un vistazo a la fuente de FitText o quizás here. Ambos calculan cuánto texto puede caber en un espacio dado. Es posible que pueda tomar prestadas ideas de ellos y adaptarse para sus propósitos.

Cuestiones relacionadas