¿Implementando un editor de texto enriquecido en Android?
richedit (6)
¿Puedes hacer lo siguiente?
- Mantenga manualmente los contenidos en EditText como su propio modelo (es decir, separando y manteniendo el documento de contenido y los atributos de vista como entidades separadas).
- Anule el procesamiento (o el método de dibujo) para hacer un diseño personalizado en partes del documento de contenido (parte de su modelo) que maneja caracteres que no son de texto (digamos viñetas con un atributo particular).
A mí me parece que si tiene que ensuciarse con el diseño, es mejor que lo escriba desde cero por su cuenta. Por lo que recuerdo, el texto de edición (y el editor de texto de richt) es ideal para cualquier cosa en la que los datos sean texto puro.
Me pregunto si hay alguna buena opción para implementar un editor de texto enriquecido en Android. Tenga en cuenta que estoy hablando de un editor de texto enriquecido que se puede utilizar en una aplicación de Android, no el que está incrustado en una página web con HTML y Javascript.
Mis requisitos son:
- Formato básico (color, fuentes, resaltado, negrita, cursiva, subrayado, etc.)
- Hipervínculos
- Imágenes en línea
- Listas de viñetas y listas numeradas
- Tabla en línea (solo el contenido dentro de una celda es editable, no la estructura de la tabla)
Como puede ver, esto es bastante similar a un control RichEdit típico en Windows.
Aquí hay algunos esfuerzos (investigación y creación de prototipos) que he realizado hasta ahora:
Usando WebView
He intentado usar un control WebView para cargar un fragmento de HTML con uno. El contenido se puede editar y, como es HTML, supongo que puede cumplir con la mayoría de mis requisitos. Pero tiene varios problemas:
- (mortal) Sin texto cariño. El usuario no tendrá idea de dónde se insertarán sus caracteres mecanografiados.
- El teclado virtual en pantalla no está visible por defecto. Hay un truco que el usuario tiene que presionar durante mucho tiempo el botón Menú para que aparezca el teclado. Pero creo que esta es una experiencia de usuario muy mala. Además, el diseño de la pantalla no está correctamente reorganizado y el teclado insertará el punto de inserción de texto algunas veces.
Usando EditText
He intentado usar el control EditText. Parece admitir cierto nivel de edición de texto enriquecido (color, fuentes, negrita, cursiva, subrayado, imágenes en línea, listas de viñetas). Pero todavía no puedo entender cómo puedo implementar los siguientes requisitos:
- Controle la apariencia del símbolo de viñeta (punto, círculo, guión, flecha, estrella, etc.)
- Lista numerada (1., 2., 3., etc.)
- Mesa
Por cierto, he visto que hay varias clases de * Span, pero no estoy seguro de si pueden ser de ayuda ... Y el http://developer.android.com no proporciona mucha información útil sobre ellos.
Entonces, ¿cómo diablos puedo implementar un editor de texto enriquecido en Android? ¿Puedo extender EditText y agregar mis nuevas funcionalidades? ¿O debería hacer algo desde cero, extender la Vista e implementar todo por mi cuenta? Para una opción posterior (ampliación de la Vista), de hecho, ni siquiera sé cómo mostrar un símbolo de intercalación de texto y parpadear, sin mencionar cómo mover el cursor con la escritura del usuario.
Estoy desesperado ahora ... ¿Alguna pista?
¡Gracias!
-Tony
( EDITAR )
Después de una investigación más profunda, parece que extender EditText sería mi mejor opción. De alguna manera descubrí cómo usar esas clases de división y supongo que podría hacer la mayoría de los trucos al usarlos (extenderlos).
Por ejemplo, extender BulletSpan y reemplazar drawLeadingMargin debería darme el control de las apariencias de viñetas. La extensión de LeadingMarginSpan debería ayudarme en la lista numerada.
En cuanto a la tabla, mi plan inicial es extender LineBackgroundSpan y dibujar todos los bordes de la tabla en la anulación drawBackground. Sin embargo, todavía tengo que encontrar la forma de diseñar todo el texto en las celdas de la tabla y manejar adecuadamente el movimiento y la selección del cursor. Sugerencias?
Acabo de publicar mi componente de editor de texto enriquecido bajo la licencia de Apache 2.0:
Extender desde EditText es la mejor opción para ti, es compatible con CharacterSpan y ParagraphSpan.
Ver mi aplicación en Google Play: https://play.google.com/store/apps/details?id=com.hly.notes
Hay un editor de texto enriquecido EditText de código abierto llamado android-richtexteditor pero el código fue inexplicablemente eliminado en r5. El código todavía está allí en r4 ; simplemente use svn para verificar r4 o anterior para acceder a él. El código parece ser compatible con cursiva, subrayado, selector de color, tamaño de texto y más.
También respondió en estas preguntas: 1 , 2
Verifique esta aplicación móvil de WordPress abierta para android. Tiene Richtexteditor muy prometedor basado en Edittext.
Puedes descargar la fuente desde here
Gracias
Probablemente extendería tanto EditText
como TableLayout
o al menos terminaría usando la mayor parte de su source si hubiera cambios lo suficientemente grandes como para hacer.