60 votes

Implémentation d'un éditeur de texte riche dans Android ?

Je me demande s'il existe de bonnes options pour mettre en place une éditeur de texte enrichi dans Android. Veuillez noter que je parle d'un éditeur de texte riche qui peut être utilisé dans une application Android, et non d'un éditeur intégré à une page web utilisant HTML et Javascript.

Mes exigences sont les suivantes :

  • Mise en forme de base (couleur, polices de caractères, surbrillance, gras, italique, soulignement, etc.)
  • Hyperliens
  • Images en ligne
  • Listes à puces et listes numérotées
  • Tableau en ligne (seul le contenu d'une cellule est modifiable, pas la structure du tableau)

Comme vous pouvez le constater, il s'agit de quelque chose d'assez similaire à un contrôle RichEdit typique sous Windows.

Voici quelques efforts (investigation et prototypage) que j'ai faits jusqu'à présent :

Utilisation de WebView

J'ai essayé d'utiliser un contrôle WebView pour charger un fragment HTML avec un . Le contenu devient éditable et comme il s'agit de HTML, je suppose que cela peut répondre à la plupart de mes besoins. Mais il y a plusieurs problèmes :

  • (mortel) Pas de curseur de texte. L'utilisateur n'aura aucune idée de l'endroit où seront insérés les caractères qu'il aura tapés.
  • Le clavier virtuel à l'écran n'est pas visible par défaut. Il existe une astuce selon laquelle l'utilisateur doit appuyer longuement sur le bouton Menu pour faire apparaître le clavier. Mais je pense que c'est une très mauvaise expérience pour l'utilisateur. En outre, la disposition de l'écran n'est pas correctement réorganisée et le point d'insertion du texte est parfois couvert par le clavier.

Utilisation de EditText

J'ai essayé d'utiliser le contrôle EditText. Il semble prendre en charge un certain niveau d'édition de texte riche (couleur, polices, gras, italique, souligné, images en ligne, listes à puces). Mais je n'arrive toujours pas à comprendre comment mettre en œuvre les exigences suivantes :

  • Contrôlez l'apparence du symbole de la balle (point, cercle, tiret, flèche, étoile, etc.).
  • Liste numérotée (1., 2., 3., etc.)
  • Tableau

BTW, j'ai vu qu'il existe plusieurs classes *Span, mais je ne suis pas sûr qu'elles puissent être d'une quelconque aide... Et le http://developer.Android.com ne fournit pas beaucoup d'informations utiles à leur sujet.


Alors, comment diable puis-je implémenter un éditeur de texte riche sur Android ? Puis-je étendre l'EditText et ajouter mes nouvelles fonctionnalités ? Ou dois-je faire quelque chose à partir de zéro - étendre la vue et tout mettre en œuvre par moi-même ? Pour la dernière option (extension de la vue), je ne sais même pas comment afficher un curseur de texte et le faire clignoter, sans parler du déplacement du curseur lorsque l'utilisateur tape.

Je suis désespéré maintenant... Des conseils ?

Merci !

-Tony


( EDIT )

Après quelques recherches supplémentaires, il semble que l'extension de EditText soit ma meilleure option. J'ai réussi à comprendre comment utiliser ces classes Span et je pense que je devrais être capable de réaliser la plupart des astuces en les utilisant (en les étendant).

Par exemple, l'extension de BulletSpan et le remplacement de drawLeadingMargin devraient me permettre de contrôler l'apparence des balles. L'extension de LeadingMarginSpan devrait m'aider pour les listes numérotées.

En ce qui concerne le tableau, mon plan initial est d'étendre la LineBackgroundSpan et de dessiner toutes les bordures du tableau dans la surcharge drawBackground. Cependant, je dois encore trouver comment disposer tout le texte dans les cellules du tableau et gérer correctement le mouvement et la sélection du curseur. Des suggestions ?

0 votes

Je regarderais celui de Commonsguy. Edit-A-Rama comme point de départ. Elle utilise un autre composant de son propre dépôt github - RichEditText.

3 votes

Vérifiez ceci nouvelle bibliothèque que je viens de télécharger, j'espère que ça vous aidera !

0 votes

Comment ajouter des données qui sont au format html à cette vue richeditor et je veux éditer la même date comment est-ce possible ?

3voto

schwiz Points 13679

Je prolongerais probablement les deux EditText et TableLayout ou au moins finir par utiliser la plupart de leurs source s'il y avait des changements assez importants que je devais faire.

3voto

Sri Points 66

Pouvez-vous faire ce qui suit :

  1. Conservez manuellement le contenu de l'EditText comme votre propre modèle (c'est-à-dire en séparant et en conservant le document de contenu et les attributs de la vue comme des entités distinctes).
  2. Remplacez la méthode render (ou draw) pour effectuer une mise en page personnalisée sur les parties du document de contenu (partie de votre modèle) qui manipulent des caractères non textuels (par exemple, des balles avec un attribut particulier).

Il me semble que si vous devez vous occuper de la mise en page, vous feriez mieux de l'écrire vous-même à partir de zéro. De ce que je me souviens, l'éditeur de texte (et l'éditeur de texte riche) est excellent pour tout ce qui concerne les données en texte pur.

2voto

Jeff Axelrod Points 8946

Il existe un éditeur de texte riche open source, EditText, appelé Éditeur de texte pour Android mais le code a été inexplicablement supprimé dans la r5. Le site le code est toujours présent dans la r4 ; il suffit d'utiliser svn pour extraire la r4 ou une version antérieure pour y accéder. Le code semble supporter l'italique, le soulignement, le sélecteur de couleur, la taille du texte, et plus encore.

Ces questions répondent également aux questions suivantes : 1 , 2

-1voto

HLY Points 37

Extend from EditText est le meilleur choix pour vous, il supporte CharacterSpan et ParagraphSpan. ParagraphSpan.

Voir mon application sur le Google Play : https://play.google.com/store/apps/details?id=com.hly.notes

0 votes

Il aurait été formidable que vous puissiez partager le code de l'éditeur de texte riche.

-2voto

DroidBot Points 1687

Vérifiez ceci source ouverte Wordpress mobile pour Android. Elle est très prometteuse Richtexteditor basé sur Edittext.

Vous pouvez télécharger la source à partir de ici

Merci

3 votes

Il s'agit d'une licence GPL, ce qui rend son utilisation impossible pour beaucoup de personnes. J'ai juste pensé que je devais le mentionner pour éviter à quiconque de perdre du temps à le regarder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X