CN116384347A - 一种富文本编辑方法 - Google Patents
一种富文本编辑方法 Download PDFInfo
- Publication number
- CN116384347A CN116384347A CN202310359520.0A CN202310359520A CN116384347A CN 116384347 A CN116384347 A CN 116384347A CN 202310359520 A CN202310359520 A CN 202310359520A CN 116384347 A CN116384347 A CN 116384347A
- Authority
- CN
- China
- Prior art keywords
- text
- picture
- rich text
- processing class
- hyperlink
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000003780 insertion Methods 0.000 claims abstract description 17
- 230000037431 insertion Effects 0.000 claims abstract description 17
- 238000009877 rendering Methods 0.000 claims abstract description 15
- 230000004048 modification Effects 0.000 claims abstract description 12
- 238000012986 modification Methods 0.000 claims abstract description 12
- 238000012217 deletion Methods 0.000 claims abstract description 5
- 230000037430 deletion Effects 0.000 claims abstract description 5
- 238000012545 processing Methods 0.000 claims description 114
- 230000014509 gene expression Effects 0.000 claims description 29
- 230000008569 process Effects 0.000 claims description 9
- 230000001960 triggered effect Effects 0.000 claims description 4
- 229920002334 Spandex Polymers 0.000 claims description 3
- 239000004759 spandex Substances 0.000 claims description 3
- 230000006870 function Effects 0.000 description 13
- 230000008859 change Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000007405 data analysis Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
- G06F16/9558—Details of hyperlinks; Management of linked annotations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/126—Character encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/60—Editing figures and text; Combining figures or text
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明提供一种富文本编辑方法,包括以下步骤:构建富文本编辑器,所述富文本编辑器包括编辑引擎Engine和渲染模块;所述编辑引擎Engine执行富文本元素变更操作,得到富文本元素变更结果,并将所述富文本元素变更结果推送给所述渲染模块,由所述渲染模块渲染出所述富文本元素变更结果;所述编辑引擎Engine执行富文本元素变更操作,具体包括:富文本元素插入操作、富文本元素修改操作和富文本元素删除操作。本发明提供的一种富文本编辑方法具有以下优点:本发明解决了富文本编辑在不同android系统版本兼容性问题,并且,操作简单,易于实现。
Description
技术领域
本发明属于android系统富文本编辑技术领域,具体涉及一种富文本编辑方法。
背景技术
目前在安卓android端实现富文本编辑的方法主要为:以webview为基础,使用WebView(用于展示web页面的控件)实现编辑器,支持n多格式,例如常见的html或者markdown格式。利用html标签对富文本处理,这种方式需要专门处理标签样式。
上述方法的实现,需要深入研究js,css等,必须非常熟悉才可以应用到实际开发中,对开发人员专业要求高,并且存在兼容性问题。
发明内容
针对现有技术存在的缺陷,本发明提供一种富文本编辑方法,可有效解决上述问题。
本发明采用的技术方案如下:
本发明提供一种富文本编辑方法,包括以下步骤:
步骤1,构建富文本编辑器,所述富文本编辑器包括编辑引擎Engine和渲染模块;
步骤2,所述编辑引擎Engine执行富文本元素变更操作,得到富文本元素变更结果,并将所述富文本元素变更结果推送给所述渲染模块,由所述渲染模块渲染出所述富文本元素变更结果;
其中,所述编辑引擎Engine执行富文本元素变更操作,具体包括:富文本元素插入操作、富文本元素修改操作和富文本元素删除操作。
优选的,当富文本元素为表情Emoji时,采用以下方法,执行表情Emoji插入操作:
每个表情Emoji通过编码字符串表示;将多个表情Emoji的编码字符串组装为一个json数组;所述json数组内配置视图控件GridView,所述视图控件GridView内具有多个文本显示视图控件TextView,每个所述文本显示视图控件TextView对应一个表情Emoji的编码字符串;
所述编辑引擎Engine对所述视图控件GridView内的各个所述文本显示视图控件TextView进行监听,当监听到任意所述文本显示视图控件TextView发生点击事件时,读取被点击的所述文本显示视图控件TextView对应的表情Emoji的编码字符串,将读取到的所述表情Emoji的编码字符串添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,完成表情Emoji插入操作。
优选的,当富文本元素为图片时,采用以下方法,执行图片插入操作:
根据图片存储路径,读取图片,并将读取到的图片上传到服务器;
通过位图创建类BitmapFactory,将上传到服务器的图片加载成位图bitmap;
使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,将加载到的所述位图bitmap绘制成具有一定样式的图片标识图标,将图片标识图标添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,得到编辑好的字符串处理类SpannableStringBuilder;
通过文本输入框EditText的内容承载体Editable的替换方法replace,将编辑好的字符串处理类SpannableStringBuilder插入到编辑页面的内容当中,完成图片标识图标插入操作;所述图片标识图标与所述图片存储路径关联;
当所述图片标识图标被点击时,通过所述图片存储路径访问并显示所述图片。
优选的,在图片插入过程中,还包括:刷新图片上传进度,方法为:
在图片上传到服务器的过程中,将图片上传进度传入自定义的图片样式处理类ImageSpan,触发所述自定义的图片样式处理类ImageSpan执行图片上传进度刷新操作,即:所述自定义的图片样式处理类ImageSpan,对文本局部显示的图片上传进度执行刷新操作。
优选的,当富文本元素为视频时,采用以下方法,执行视频插入操作:
根据视频存储路径,读取到视频;
通过位图创建类BitmapFactory,将读取到的视频加载成位图bitmap;
使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,将加载到的所述位图bitmap绘制成具有一定样式的视频标识图标,并通过位置绘制drawBitmap的方法,在视频标识图标中绘制播放按钮,得到最终的视频标识图标;
将最终的视频标识图标添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,得到编辑好的字符串处理类SpannableStringBuilder;
通过文本输入框EditText的内容承载体Editable的替换方法replace,将编辑好的字符串处理类SpannableStringBuilder插入到编辑页面的内容当中,完成最终的视频标识图标插入操作;所述视频标识图标和所述视频存储路径关联;
当所述最终的视频标识图标被点击时,通过所述视频存储路径访问并播放所述视频。
优选的,当富文本元素为超链接时,采用以下方法,执行超链接插入操作:
需要显示的超链接标识包括:超链接标识图标和超链接标识文字两部分;在编辑页面中,首先计算显示超链接标识所需区域的宽度和高度;其中,高度为显示的所述超链接标识图标的高度;宽度为所述超链接标识图标的宽度、所述超链接标识文字的宽度、以及所述超链接标识文字和所述超链接标识图标之间间距的和;
使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,绘制完成所述超链接标识;其中,所述超链接标识图标的绘制方法为:读取本地的超链接标识图标,并通过位图创建类BitmapFactory,将读取到的超链接标识图标加载成位图bitmap,再使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,将加载到的所述位图bitmap绘制成具有一定样式的超链接标识图标;所述超链接标识文字的绘制方法为:使用画布Canvas的文字绘制函数drawText,进行所述超链接标识文字的绘制;
将绘制完成的所述超链接标识,添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,得到编辑好的字符串处理类SpannableStringBuilder;
通过文本输入框EditText的内容承载体Editable的替换方法replace,将编辑好的字符串处理类SpannableStringBuilder插入到编辑页面的内容当中,完成超链接标识的插入操作;
当所述超链接标识被点击时,直接访问所述超链接标识对应的超链接的目的地址。
优选的,采用以下方法,执行富文本元素的删除操作:
将编辑页面自上向下划分为多个触摸区域,每个触摸区域关联一个文本样式处理类span;每个触摸区域的某个触摸位置关联删除按钮;
当任意触摸区域发生触摸事件时,获取该触摸区域对应的文本样式处理类span,并向获取到的所述文本样式处理类span发送执行触摸事件的指令;
所述文本样式处理类span,判断所述删除按钮是否被点击,如果是,则调用删除函数removeSpan(),对所述触摸区域执行删除操作。
优选的,采用以下方法,执行富文本元素的修改操作:
首先按富文本元素的删除操作逻辑,执行富文本元素的删除操作;然后,按照富文本元素的插入操作逻辑,执行富文本元素的插入操作,从而完成富文本元素的修改操作。
优选的,还包括:
步骤3,在编辑页面完成富文本元素编辑后,将编辑后的文本生成html格式的数据文档。
优选的,步骤3具体为:
编辑页面中,自上向下按序排列多个文本text;每个文本text为一个节点,对应一个文本样式处理类span;
按序遍历各个节点的文本样式处理类span,根据文本样式处理类span的类型,获取对应节点内容;具体的,所述文本样式处理类span的类型,包括:自定义视频处理类AreVideoSpan、自定义图片处理类AreImageSpan、自定义超链接处理类AreLinkImageSpan和字符样式处理类;所述自定义视频处理类AreVideoSpan,用于以图片的形式显示视频标识图标;所述自定义图片处理类AreImageSpan,用于以图片的形式显示图片标识图标;所述自定义超链接处理类AreLinkImageSpan,用于以图片的形式显示超链接标识;所述字符样式处理类,用于以字符的形式显示文字以及表情Emoji;
对于每个节点获取的节点内容,添加对应节点类型的标签,得到带标签的节点内容;
按照节点顺序,将各个所述带标签的节点内容拼接,得到html格式的数据文档。
本发明提供的一种富文本编辑方法具有以下优点:
本发明解决了富文本编辑在不同android系统版本兼容性问题,并且,操作简单,易于实现。
附图说明
图1为本发明提供的富文本编辑器的架构图;
图2为本发明提供的数据变更流程图;
图3为本发明生成的一种富文本文件的示意图。
具体实施方式
为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明涉及android系统富文本编辑的实现,具体涉及在android系统上基于span+EditText实现富文本编辑器插入图片、视频、超链接、文字、表情,以及富文本元素的其他编辑方法。
为了方便拓展类型以及数据的通用性,数据格式使用html标签实现,而不是以JSON实现。传统的富文本元素形式为:"{"type":"video",
"data":{"url":"xxx.mp4","thumb":"base64 str","size":1024}}"的字符串。本发明,则是要用以下形式:以视频富文本元素节点为例,<video src="xxx.mp4"video_title_tag="视频标题让我们看看这都是什么格式"c_tag="xxx.jpeg"video_width_tag="1280"b_tag="720"a_tag="133394"controls="controls">
</video>,针对不同类型,以html格式为标准,设置不同的标签,再根据定制需求插入约定的标签,实现数据的通用性。
在处理富文本元素的局部点击事件,采用的方案为重写EditText的onTouchEvent事件,获取当前触摸的位置,判断当前触摸位置的富文本元素类型,分发给对应的富文本元素类型,在富文本元素类型内,根据触摸位置的坐标与元素行为动作,例如删除、刷新的矩形区域进行匹配,从而进行响应,由此做到一个元素可处理多种行为操作。
在处理富文本元素刷新的问题上,可以根据实际情况确定采用刷新机制或替换机制。例如在图片上传过程中刷新上传进度,则采用刷新方式,对需要刷新的富文本元素进行无感知修改,进而触发span的自身刷新机制,从而达到刷新的目的。而在处理超链的富文本元素更新的过程中,采用替换机制,首选获得该元素的位置,在该元素位置上重新插入一个超链元素,并将旧的超链元素删除,从而达到修改的目的。
与现有技术相比,本发明的有益效果是:
1)本发明在很大程度上避免了富文本编辑在不同android系统版本兼容性问题。
2)同时相较于组合view的形式,本发明在一定程度上优化内存的使用,使用最小内存对象或者资源可以减小内存开销,提高用户的体验。
3)独特的刷新机制,降低了在刷新过程中对系统资源的消耗,提升应用的稳定性和性能。
4)编辑体验更加流程,后期拓展方便,支持多种效果,相较于Recyclerview实现方案,避免焦点相关问题。
本发明提供一种富文本编辑方法,包括以下步骤:
步骤1,构建富文本编辑器,所述富文本编辑器包括编辑引擎Engine和渲染模块;
步骤2,所述编辑引擎Engine执行富文本元素变更操作,得到富文本元素变更结果,并将所述富文本元素变更结果推送给所述渲染模块,由所述渲染模块渲染出所述富文本元素变更结果;
其中,所述编辑引擎Engine执行富文本元素变更操作,具体包括:富文本元素插入操作、富文本元素修改操作和富文本元素删除操作。
在具体实现上,如图1所示,为富文本编辑器的架构图,富文本编辑器主要由两部分组成。第一部分负责UI的创建和管理。第二部分为编辑引擎Engine,编辑引擎Engine完成所有富文本的编辑工作,由核心处理器Core和一系列插件构成。通过插件和核心处理器Core共同协作的方式,共同完成整个编辑器的核心,即:富文本编辑功能。
在具体实现上,富文本编辑器对于数据变更流程进行严格控制。如图2所示,为数据变更流程图。只要产生数据变更,无论是初始化导致,还是用户交互操作导致,这种数据变更必须先提交给核心处理器Core。在核心处理器Core确认后,才会推送给渲染层的view模块。经过处理之后,再推送给renderer模块进行实际渲染。所有插件都统一遵守这个数据变更流程。
下面对富文本编辑的各种操作,详细介绍:
(一)表情Emoji插入操作
当富文本元素为表情Emoji时,采用以下方法,执行表情Emoji插入操作:
每个表情Emoji通过编码字符串表示;将多个表情Emoji的编码字符串组装为一个json数组;所述json数组内配置视图控件GridView,所述视图控件GridView内具有多个文本显示视图控件TextView,每个所述文本显示视图控件TextView对应一个表情Emoji的编码字符串;
所述编辑引擎Engine对所述视图控件GridView内的各个所述文本显示视图控件TextView进行监听,当监听到任意所述文本显示视图控件TextView发生点击事件时,读取被点击的所述文本显示视图控件TextView对应的表情Emoji的编码字符串,将读取到的所述表情Emoji的编码字符串添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,完成表情Emoji插入操作。
(二)图片插入操作
当富文本元素为图片时,采用以下方法,执行图片插入操作:
根据图片存储路径,读取图片,并将读取到的图片上传到服务器;
通过位图创建类BitmapFactory,将上传到服务器的图片加载成位图bitmap;
使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,将加载到的所述位图bitmap绘制成具有一定样式的图片标识图标,将图片标识图标添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,得到编辑好的字符串处理类SpannableStringBuilder;
通过文本输入框EditText的内容承载体Editable的替换方法replace,将编辑好的字符串处理类SpannableStringBuilder插入到编辑页面的内容当中,完成图片标识图标插入操作;所述图片标识图标与所述图片存储路径关联;
当所述图片标识图标被点击时,通过所述图片存储路径访问并显示所述图片。
在图片插入过程中,还包括:刷新图片上传进度,方法为:
在图片上传到服务器的过程中,将图片上传进度传入自定义的图片样式处理类ImageSpan,触发所述自定义的图片样式处理类ImageSpan执行图片上传进度刷新操作,即:所述自定义的图片样式处理类ImageSpan,对文本局部显示的图片上传进度执行刷新操作。
(三)视频插入操作
当富文本元素为视频时,采用以下方法,执行视频插入操作:
根据视频存储路径,读取到视频;
通过位图创建类BitmapFactory,将读取到的视频加载成位图bitmap;
使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,将加载到的所述位图bitmap绘制成具有一定样式的视频标识图标,并通过位置绘制drawBitmap的方法,在视频标识图标中绘制播放按钮,得到最终的视频标识图标;
将最终的视频标识图标添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,得到编辑好的字符串处理类SpannableStringBuilder;
通过文本输入框EditText的内容承载体Editable的替换方法replace,将编辑好的字符串处理类SpannableStringBuilder插入到编辑页面的内容当中,完成最终的视频标识图标插入操作;所述视频标识图标和所述视频存储路径关联;
当所述最终的视频标识图标被点击时,通过所述视频存储路径访问并播放所述视频。
(四)超链接插入操作
当富文本元素为超链接时,采用以下方法,执行超链接插入操作:
需要显示的超链接标识包括:超链接标识图标和超链接标识文字两部分;在编辑页面中,首先计算显示超链接标识所需区域的宽度和高度;其中,高度为显示的所述超链接标识图标的高度;宽度为所述超链接标识图标的宽度、所述超链接标识文字的宽度、以及所述超链接标识文字和所述超链接标识图标之间间距的和;
使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,绘制完成所述超链接标识;其中,所述超链接标识图标的绘制方法为:读取本地的超链接标识图标,并通过位图创建类BitmapFactory,将读取到的超链接标识图标加载成位图bitmap,再使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,将加载到的所述位图bitmap绘制成具有一定样式的超链接标识图标;所述超链接标识文字的绘制方法为:使用画布Canvas的文字绘制函数drawText,进行所述超链接标识文字的绘制;
将绘制完成的所述超链接标识,添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,得到编辑好的字符串处理类SpannableStringBuilder;
通过文本输入框EditText的内容承载体Editable的替换方法replace,将编辑好的字符串处理类SpannableStringBuilder插入到编辑页面的内容当中,完成超链接标识的插入操作;
当所述超链接标识被点击时,直接访问所述超链接标识对应的超链接的目的地址。
(五)富文本元素的删除操作
采用以下方法,执行富文本元素的删除操作:
将编辑页面自上向下划分为多个触摸区域,每个触摸区域关联一个文本样式处理类span;每个触摸区域的某个触摸位置关联删除按钮;
当任意触摸区域发生触摸事件时,获取该触摸区域对应的文本样式处理类span,并向获取到的所述文本样式处理类span发送执行触摸事件的指令;
所述文本样式处理类span,判断所述删除按钮是否被点击,如果是,则调用删除函数removeSpan(),对所述触摸区域执行删除操作。
(六)富文本元素的修改操作
采用以下方法,执行富文本元素的修改操作:
首先按富文本元素的删除操作逻辑,执行富文本元素的删除操作;然后,按照富文本元素的插入操作逻辑,执行富文本元素的插入操作,从而完成富文本元素的修改操作。
(七)生成html格式的数据文档
步骤3,在编辑页面完成富文本元素编辑后,将编辑后的文本生成html格式的数据文档。
步骤3具体为:
编辑页面中,自上向下按序排列多个文本text;每个文本text为一个节点,对应一个文本样式处理类span;
按序遍历各个节点的文本样式处理类span,根据文本样式处理类span的类型,获取对应节点内容;具体的,所述文本样式处理类span的类型,包括:自定义视频处理类AreVideoSpan、自定义图片处理类AreImageSpan、自定义超链接处理类AreLinkImageSpan和字符样式处理类;所述自定义视频处理类AreVideoSpan,用于以图片的形式显示视频标识图标;所述自定义图片处理类AreImageSpan,用于以图片的形式显示图片标识图标;所述自定义超链接处理类AreLinkImageSpan,用于以图片的形式显示超链接标识;所述字符样式处理类,用于以字符的形式显示文字以及表情Emoji;
对于每个节点获取的节点内容,添加对应节点类型的标签,得到带标签的节点内容;
按照节点顺序,将各个所述带标签的节点内容拼接,得到html格式的数据文档。
作为一种具体方式,为方便数据文档跨平台使用,需要生成html格式的数据文档,鉴于部分节点的特殊性,需要在相应的节点添加自定义标签,用于传递信息。视频节点的数据格式以“video”标签进行包裹,以html标签格式进行字符拼接。图片节点的数据格式以“img”标签进行包裹,超链节点采用“a”标签进行包裹。普通文字以及emoji表情采用“<p>”标签进行包裹。各标签再用“p”标签进行包裹。按照节点顺序根据不同节点进行节点内容数据拼接。根据不同的节点分别生成相应的节点数据格式,提供高可定制性以及可拓展性。
(八)二次编辑
二次编辑,是指对已生成的富文本文件,再次进行编辑。
例如,对图3所示的富文本文件再次进行编辑,主要利用开源Html解析器jsoup进行数据解析。首先利用Jsoup的parse进行数据解析,得到内容数据节点。然后通过Jsoup的getElementsByTag获取“body”标签下的所有一级子标签。将所有标签构造成相应的数据类,包括视频节点类、图片节点类,文字节点类,其中文字节点类区分是否是超链节点。根据标签类型构造相应的数据类还要区分是否有子节点。根据有无子节点进行区分构造数据类,经过转换构造后得到有序的数据节点类列表。在获得有序数据节点类列表后,按序遍历数据节点类列表,根据不同数据类型执行编辑操作。
在读取已生成的富文本文件时,采用以下方法:当富文本编辑器接收到读取富文本文件的请求后,进行解析,将富文本文件转换成DOM树,然后再对DOM树进行转换,将具有相同语义或者相同标签归一化成同一个标签,从而简化后续算法实现,使得关注尽量少的节点。然后经过过滤处理,将非法的节点和属性剔除掉。经过过滤之后,得到纯净的DOM树。这个DOM树上的每一个节点和属性是富文本编辑器能够理解和识别的,然后进行序列化后,提交给编辑器渲染出来,就能完成整个文档的读取流程。
本发明提供的一种富文本编辑方法具有以下优点:
本发明解决了富文本编辑在不同android系统版本兼容性问题,并且,操作简单,易于实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (10)
1.一种富文本编辑方法,其特征在于,包括以下步骤:
步骤1,构建富文本编辑器,所述富文本编辑器包括编辑引擎Engine和渲染模块;
步骤2,所述编辑引擎Engine执行富文本元素变更操作,得到富文本元素变更结果,并将所述富文本元素变更结果推送给所述渲染模块,由所述渲染模块渲染出所述富文本元素变更结果;
其中,所述编辑引擎Engine执行富文本元素变更操作,具体包括:富文本元素插入操作、富文本元素修改操作和富文本元素删除操作。
2.根据权利要求1所述的一种富文本编辑方法,其特征在于,当富文本元素为表情Emoji时,采用以下方法,执行表情Emoji插入操作:
每个表情Emoji通过编码字符串表示;将多个表情Emoji的编码字符串组装为一个json数组;所述json数组内配置视图控件GridView,所述视图控件GridView内具有多个文本显示视图控件TextView,每个所述文本显示视图控件TextView对应一个表情Emoji的编码字符串;
所述编辑引擎Engine对所述视图控件GridView内的各个所述文本显示视图控件TextView进行监听,当监听到任意所述文本显示视图控件TextView发生点击事件时,读取被点击的所述文本显示视图控件TextView对应的表情Emoji的编码字符串,将读取到的所述表情Emoji的编码字符串添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,完成表情Emoji插入操作。
3.根据权利要求1所述的一种富文本编辑方法,其特征在于,当富文本元素为图片时,采用以下方法,执行图片插入操作:
根据图片存储路径,读取图片,并将读取到的图片上传到服务器;
通过位图创建类BitmapFactory,将上传到服务器的图片加载成位图bitmap;
使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,将加载到的所述位图bitmap绘制成具有一定样式的图片标识图标,将图片标识图标添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,得到编辑好的字符串处理类SpannableStringBuilder;
通过文本输入框EditText的内容承载体Editable的替换方法replace,将编辑好的字符串处理类SpannableStringBuilder插入到编辑页面的内容当中,完成图片标识图标插入操作;所述图片标识图标与所述图片存储路径关联;
当所述图片标识图标被点击时,通过所述图片存储路径访问并显示所述图片。
4.根据权利要求3所述的一种富文本编辑方法,其特征在于,在图片插入过程中,还包括:刷新图片上传进度,方法为:
在图片上传到服务器的过程中,将图片上传进度传入自定义的图片样式处理类ImageSpan,触发所述自定义的图片样式处理类ImageSpan执行图片上传进度刷新操作,即:所述自定义的图片样式处理类ImageSpan,对文本局部显示的图片上传进度执行刷新操作。
5.根据权利要求1所述的一种富文本编辑方法,其特征在于,当富文本元素为视频时,采用以下方法,执行视频插入操作:
根据视频存储路径,读取到视频;
通过位图创建类BitmapFactory,将读取到的视频加载成位图bitmap;
使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,将加载到的所述位图bitmap绘制成具有一定样式的视频标识图标,并通过位置绘制drawBitmap的方法,在视频标识图标中绘制播放按钮,得到最终的视频标识图标;
将最终的视频标识图标添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,得到编辑好的字符串处理类SpannableStringBuilder;
通过文本输入框EditText的内容承载体Editable的替换方法replace,将编辑好的字符串处理类SpannableStringBuilder插入到编辑页面的内容当中,完成最终的视频标识图标插入操作;所述视频标识图标和所述视频存储路径关联;
当所述最终的视频标识图标被点击时,通过所述视频存储路径访问并播放所述视频。
6.根据权利要求1所述的一种富文本编辑方法,其特征在于,当富文本元素为超链接时,采用以下方法,执行超链接插入操作:
需要显示的超链接标识包括:超链接标识图标和超链接标识文字两部分;在编辑页面中,首先计算显示超链接标识所需区域的宽度和高度;其中,高度为显示的所述超链接标识图标的高度;宽度为所述超链接标识图标的宽度、所述超链接标识文字的宽度、以及所述超链接标识文字和所述超链接标识图标之间间距的和;
使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,绘制完成所述超链接标识;其中,所述超链接标识图标的绘制方法为:读取本地的超链接标识图标,并通过位图创建类BitmapFactory,将读取到的超链接标识图标加载成位图bitmap,再使用自定义的图片样式处理类ImageSpan,并重写绘制函数Draw,将加载到的所述位图bitmap绘制成具有一定样式的超链接标识图标;所述超链接标识文字的绘制方法为:使用画布Canvas的文字绘制函数drawText,进行所述超链接标识文字的绘制;
将绘制完成的所述超链接标识,添加到字符串处理类SpannableStringBuilder中;
采用所述字符串处理类SpannableStringBuilder,替换编辑页面中EditText光标当前起始位置到结束位置之间的区域,得到编辑好的字符串处理类SpannableStringBuilder;
通过文本输入框EditText的内容承载体Editable的替换方法replace,将编辑好的字符串处理类SpannableStringBuilder插入到编辑页面的内容当中,完成超链接标识的插入操作;
当所述超链接标识被点击时,直接访问所述超链接标识对应的超链接的目的地址。
7.根据权利要求1所述的一种富文本编辑方法,其特征在于,采用以下方法,执行富文本元素的删除操作:
将编辑页面自上向下划分为多个触摸区域,每个触摸区域关联一个文本样式处理类span;每个触摸区域的某个触摸位置关联删除按钮;
当任意触摸区域发生触摸事件时,获取该触摸区域对应的文本样式处理类span,并向获取到的所述文本样式处理类span发送执行触摸事件的指令;
所述文本样式处理类span,判断所述删除按钮是否被点击,如果是,则调用删除函数removeSpan(),对所述触摸区域执行删除操作。
8.根据权利要求1所述的一种富文本编辑方法,其特征在于,采用以下方法,执行富文本元素的修改操作:
首先按富文本元素的删除操作逻辑,执行富文本元素的删除操作;然后,按照富文本元素的插入操作逻辑,执行富文本元素的插入操作,从而完成富文本元素的修改操作。
9.根据权利要求1所述的一种富文本编辑方法,其特征在于,还包括:
步骤3,在编辑页面完成富文本元素编辑后,将编辑后的文本生成html格式的数据文档。
10.根据权利要求9所述的一种富文本编辑方法,其特征在于,步骤3具体为:
编辑页面中,自上向下按序排列多个文本text;每个文本text为一个节点,对应一个文本样式处理类span;
按序遍历各个节点的文本样式处理类span,根据文本样式处理类span的类型,获取对应节点内容;具体的,所述文本样式处理类span的类型,包括:自定义视频处理类AreVideoSpan、自定义图片处理类AreImageSpan、自定义超链接处理类AreLinkImageSpan和字符样式处理类;所述自定义视频处理类AreVideoSpan,用于以图片的形式显示视频标识图标;所述自定义图片处理类AreImageSpan,用于以图片的形式显示图片标识图标;所述自定义超链接处理类AreLinkImageSpan,用于以图片的形式显示超链接标识;所述字符样式处理类,用于以字符的形式显示文字以及表情Emoji;
对于每个节点获取的节点内容,添加对应节点类型的标签,得到带标签的节点内容;
按照节点顺序,将各个所述带标签的节点内容拼接,得到html格式的数据文档。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310359520.0A CN116384347A (zh) | 2023-04-06 | 2023-04-06 | 一种富文本编辑方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310359520.0A CN116384347A (zh) | 2023-04-06 | 2023-04-06 | 一种富文本编辑方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116384347A true CN116384347A (zh) | 2023-07-04 |
Family
ID=86964188
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310359520.0A Pending CN116384347A (zh) | 2023-04-06 | 2023-04-06 | 一种富文本编辑方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116384347A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117195840A (zh) * | 2023-11-08 | 2023-12-08 | 一网互通(北京)科技有限公司 | web编辑器中实时标注和插入异形对象的方法及装置 |
-
2023
- 2023-04-06 CN CN202310359520.0A patent/CN116384347A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117195840A (zh) * | 2023-11-08 | 2023-12-08 | 一网互通(北京)科技有限公司 | web编辑器中实时标注和插入异形对象的方法及装置 |
CN117195840B (zh) * | 2023-11-08 | 2024-01-12 | 一网互通(北京)科技有限公司 | web编辑器中实时标注和插入异形对象的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100440356C (zh) | 记录交互内容版本信息的信息存储介质的记录与重现方法 | |
US20100199167A1 (en) | Document processing apparatus | |
JPWO2006051715A1 (ja) | 文書処理装置及び文書処理方法 | |
JPWO2006051905A1 (ja) | データ処理装置およびデータ処理方法 | |
JP2008508642A (ja) | 新規フラグメント及び新規スキームを用いたマークアップ言語環境において新規文書を生成するための文書処理及び管理方法 | |
JPWO2006051870A1 (ja) | データ処理装置、文書処理装置及び文書処理方法 | |
JP4521408B2 (ja) | 文書処理装置及び文書処理方法 | |
CN106126779B (zh) | 应用于svg画面组态中的组态复用方法 | |
JPWO2006051713A1 (ja) | 文書処理装置及び文書処理方法 | |
US7805452B2 (en) | Data processing device and data processing method | |
US20100100807A1 (en) | Data processing device, and data processing method | |
CN116384347A (zh) | 一种富文本编辑方法 | |
JPWO2006051954A1 (ja) | 文書処理装置及び文書処理方法 | |
US20070208995A1 (en) | Document Processing Device and Document Processing Method | |
US20070198915A1 (en) | Document Processing Device And Document Processing Method | |
JPWO2006051869A1 (ja) | 文書処理装置及び文書処理方法 | |
JPWO2006051712A1 (ja) | 文書処理装置及び文書処理方法 | |
JPWO2006051716A1 (ja) | 文書処理装置及び文書処理方法 | |
JP4723511B2 (ja) | 文書処理装置及び文書処理方法 | |
JPWO2006051955A1 (ja) | サーバ装置及び名前空間発行方法 | |
CN114021042A (zh) | 网页内容的提取方法、装置、计算机设备和存储介质 | |
CN110020279B (zh) | 页面数据处理方法、装置及存储介质 | |
US20100077295A1 (en) | Document processing device and document processing module | |
US20080005136A1 (en) | Data Processing Device, Document Processing Device, and Document Processing Method | |
JPWO2006051956A1 (ja) | サーバ装置及び検索方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |