【问题标题】:Implementing a rich text editor in Android?在 Android 中实现富文本编辑器?
【发布时间】:2010-11-26 08:50:59
【问题描述】:

我想知道是否有任何好的选择可以在 Android 中实现 富文本编辑器。请注意,我说的是可以在 Android 应用程序中使用的富文本编辑器,而不是使用 HTML 和 Javascript 嵌入到网页中的编辑器。

我的要求是:

  • 基本格式(颜色、字体、突出显示、粗体、斜体、下划线等)
  • 超链接
  • 内嵌图片
  • 项目符号列表和编号列表
  • 内联表格(只有单元格内的内容是可编辑的,而不是表格结构)

如您所见,这与 Windows 上的典型 RichEdit 控件非常相似。

以下是我迄今为止所做的一些努力(调查和原型设计):

使用 Web 视图

我尝试使用 WebView 控件加载一个带有 .内容变得可编辑,因为它是 HTML,我想它可以满足我的大部分要求。但它有几个问题:

  • (致命)没有文本插入符号。用户将不知道他/她输入的字符将被插入到哪里。
  • 默认情况下,屏幕软键盘不可见。有一个技巧,用户必须长按菜单按钮才能调出键盘。但我认为这是一个非常糟糕的用户体验。此外,屏幕布局未正确重新排列,文本插入点有时会被键盘覆盖。

使用编辑文本

我尝试过使用 EditText 控件。它似乎支持某种程度的富文本编辑(颜色、字体、粗体、斜体、下划线、内嵌图像、项目符号列表)。但我仍然无法弄清楚如何实现以下要求:

  • 控制项目符号的外观(点、圆、破折号、箭头、星号等)
  • 编号列表(1.、2.、3. 等)
  • 表

顺便说一句,我已经看到有几个 *Span 类,但我不确定它们是否可以提供任何帮助......而且http://developer.android.com 没有提供太多有用的信息。


那么,究竟如何在 Android 上实现富文本编辑器呢? 我可以扩展 EditText 并添加我的新功能吗?还是我应该从头开始做一些事情 - 扩展视图并自己实现一切?对于后面的选项(扩展视图),我什至不知道如何显示文本插入符号并使其闪烁,更不用说在用户输入时移动插入符号了。

我现在很绝望……有什么提示吗?

谢谢!

-托尼


(编辑)

经过进一步调查,看起来扩展 EditText 是我最好的选择。我不知何故想出了如何使用这些 Span 类,并猜测我应该能够通过使用(扩展)它们来完成大部分技巧。

例如,扩展 BulletSpan 并覆盖 drawLeadingMargin 应该可以让我控制项目符号的外观。扩展LeadingMarginSpan 应该对我的编号列表有所帮助。

对于表格,我最初的计划是扩展 LineBackgroundSpan 并在 drawBackground 覆盖中绘制所有表格边框。但是,我仍然需要弄清楚如何布局表格单元格中的所有文本并正确处理插入符号的移动和选择。有什么建议吗?

【问题讨论】:

  • 我会以 commonsguy 的 Edit-A-Rama 演示作为起点。它利用了他自己的 github repo 中的另一个组件 - RichEditText。
  • 查看我刚刚上传的new library,希望对您有所帮助!
  • 如何将一些 html 格式的数据添加到这个 Richeditor 视图中,我想如何编辑相同的日期

标签: android android-edittext richedit


【解决方案1】:

我刚刚在 Apache 2.0 许可下发布了我的富文本编辑器组件:

https://github.com/1gravity/Android-RTEditor

【讨论】:

  • 如何隐藏图标?我试图在“rte_toolbar_character”中执行此操作,这是将重新生成的生成源文件。所以我没有办法隐藏它们?
  • 隐藏就像从布局中移除一样。您不需要使用任何包含的布局(rte_toolbar、rte_toolbar_character 或 rte_toolbar_paragraph)。只需将其复制到您的应用程序中,删除您想要删除的任何内容并在您的布局中使用它。包含的三个布局只是演示布局,您可以使用任何您想要的东西。也无需 fork 应用程序,使用 gradle 依赖和您选择的布局。
【解决方案2】:
【解决方案3】:

如果我需要进行足够大的更改,我可能会同时扩展 EditText 和 TableLayout,或者至少最终使用大部分 source。

【讨论】:

    【解决方案4】:

    你能做到以下几点:

    1. 手动将 EditText 中的内容保存为您自己的模型(即,将内容文档和视图属性作为单独的实体进行分离和维护)。
    2. 覆盖渲染(或绘制方法)以对处理非文本字符(例如具有特定属性的项目符号)的内容文档部分(模型的一部分)进行自定义布局。

    在我看来,如果你不得不对布局感到困惑,你最好自己从头开始编写它。据我所知,编辑文本(和富文本编辑器)非常适合数据为纯文本的任何内容。

    【讨论】:

      【解决方案5】:

      有一个名为android-richtexteditor的开源EditText富文本编辑器,但代码在r5中被莫名其妙地删除了。 code is still there in r4;只需使用 svn 签出 r4 或更早的版本即可访问它。该代码似乎支持斜体、下划线、颜色选择器、文本大小等。

      还回答了以下问题:1、2

      【讨论】:

        【解决方案6】:

        从 EditText 扩展是您的最佳选择,它支持 CharacterSpan 和 段落跨度。

        在 Google Play 上查看我的应用: https://play.google.com/store/apps/details?id=com.hly.notes

        【讨论】:

        • 如果你能分享富文本编辑器的代码就太好了
        【解决方案7】:

        查看这个开源 Wordpress mobile 应用程序。它有非常有前途的基于Edittext 的Richtexteditor。

        你可以从here下载源码

        谢谢

        【讨论】:

        • 这是 GPL,让很多人无法使用,只是想我会提到它以节省其他人浪费的时间查看它。
        猜你喜欢
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        相关资源
        最近更新 更多