2010-08-01 3 views
1

On m'a demandé de construire une application qui permet à l'utilisateur de faire défiler des quantités massives de texte. Le texte aura plusieurs milliers de pages. Question: Quelle est la meilleure approche pour faire défiler beaucoup de texte mais charger à la demande plus de texte si nécessaire (vers le haut ou vers le bas). Je ne veux pas charger tout le flux de texte, car cela prendrait beaucoup de temps. Il devra afficher du texte dans différentes couleurs et styles. par exemple, les en-têtes du texte seront en gras.Android texte extrêmement long: des idées de défilement?

Je considérais le webview, mais je devrais charger le texte entier dans ce n'est pas moi?

Think: "Navigateur pour les romans Guerre et Paix"

Idées?

Répondre

4

En supposant que le texte comporte des fragments de taille raisonnable (par exemple, des en-têtes et des paragraphes), j'utiliserais un ListView, les lignes étant TextViews. Vous pouvez désactiver les diviseurs, et vous devriez être en mesure de définir les dispositions de ligne pour qu'elles apparaissent comme un flux continu de texte (en tirant parti de la transition entre les lignes pour vous donner l'espacement des paragraphes). TextView prend en charge Spannable contenu, facilement obtenu à partir de HTML via Html.fromHtml().

Votre ListAdapter aurait besoin de connaître le nombre de lignes dont vous auriez besoin (somme des titres et des paragraphes). Comme vous ne pouvez pas conserver tout ce texte dans la RAM, selon toute vraisemblance, le ListAdapter devrait être quelque peu virtuel, capable d'extraire des fragments de texte au besoin, avec une petite quantité mise en cache pour un défilement rapide à courte portée.

Cette approche vous permet de profiter du recyclage des lignes de ListView, afin de minimiser l'utilisation de la RAM, tout en vous offrant un contrôle de formatage raisonnable.

Certaines personnes ont essayé d'utiliser WebView comme lignes dans un ListView, si le formatage TextView est insuffisant. Cependant, je ne sais pas comment cela fonctionne, puisque WebView est scrollable, et mettre des éléments scrollables à l'intérieur d'autres éléments scrollables (ListView) est typiquement problématique.