好吧,所以我有一个有点奇怪的问题。我正在使用 RichTextEditor 并允许用户重新调整它的大小。所有控件都被剥离到一个主工具栏上,这样 RichTextEditor 看起来就像一个带有文本的框。我有一个问题,当我保存编辑器生成的 htmltext 然后稍后重新渲染它时,它总是在文本末尾添加一个额外的换行符。我发现这是由于段落标签造成的,因为我希望用户能够对齐文本,所以我必须保留它。有谁知道如何在不去除所有格式的情况下去除最后一个换行符?
3 回答
我对此进行了修复,基本上涉及剥离最后一个结束段落标签</P>
。RichTextEditor 很丑:(
这绝对是一个错误,它是通过设置“htmlText”属性而不是“text”属性来触发的。无论您是在代码中分配它,还是让设计人员通过检查文本字段属性中的“呈现为 html”按钮来设置“htmlText”而不是“文本”,都会发生这种情况。另外值得注意的是,这只发生在“输入”类型的文本字段上。如果您从“动态”类型的文本字段开始,然后将“类型”设置为“输入”(还必须将“可选择”设置为 true,否则光标将不可见(另一个错误)),您将看到额外的行出现在右侧在你的眼前。同样,这不会影响动态文本字段,只会影响那些处于输入模式的字段。
尽管 htmlText 属性在这两种情况下都是相同的,无论您将“Hello”之类的字符串分配给 text 还是 htmlText(生成的 htmlText 值都相同),但仅在设置 htmlText 属性时才会出现额外的行。
具体来说,当您将 htmlText 设置为实际包含 html 段落标签的字符串时,就会发生这种情况。如果只是给 htmlText 分配一些文本,比如“Hello”,就不会出现问题。另一方面,如果您分配了 htmlText<p>Hello</p>
或将 htmlText 分配给了自身(您需要这样做以保留 html 并强制内部指标立即更新),那么就会出现问题。有人提到,如果你省略了结束</p>
标签,就不会出现问题,这是真的。<a>Hello</a>
分配类似的东西也不会触发问题,这也是事实。
所以总而言之,这个问题只有在将自动调整大小、多行、输入类型文本字段的htmlText属性设置为包含标签的值时才会出现。<p></p>
它不会发生在动态文本字段中,也不会发生在未自动调整大小的输入文本字段上,也不会发生在那些自动调整大小但未<p>
为 htmlText 分配标签的文本字段中。
要重现此问题,请在设计器中设置一个文本字段并确保打开背景和轮廓以便您可以看到字段的大小,然后它将是单行高(多行文本字段),如预期(假设它足够宽)。如果您然后转到代码并设置txtfld.htmlText = txtfld.htmlText
(将其设置为自身),则仅将 htmlText 属性分配(为其自己的相同值)会导致添加额外的行。并且 htmlText 的值实际上是相同的,它实际上并没有隐藏额外的<p>
标签或任何东西......它只是显示了这个不应该存在的尾随返回。正如预期的那样,当您在文本字段的 Flash 属性中选中“呈现为 html”时,也会发生同样的事情,这似乎导致它设置了 htmlText 而不是文本,并导致问题出现。
实际上不可能有两种渲染模式,因为它在技术上总是渲染 htmlText(即 htmlText 总是有一个值,并且您总是可以使用 setTextFormat 设置文本的某些段的文本格式,该格式最初是用“文本”分配的,这不会触发某种切换到“html呈现模式”或类似的东西。
这种行为似乎严格来说是分配 htmlText 属性的结果。
避免它的唯一方法(除了设置 htmlText、读回值、剥离最后一个</p>
标签并重新分配它)是将所有文本字段初始化为纯“文本”,然后通过调用手动应用格式设置文本格式(文本格式,开始索引,结束索引)。
如原始问题帖子中所述,此错误的真正灾难是您无法保存和恢复 TextField 的 htmlText 值,因为将 htmlText 设置为包含 html 的字符串(特别是 p 标签)会导致这一额外的行补充说,如果您特别希望文本字段的大小正确,您可能会打开自动调整大小,特别是当这个问题出现并确保大小不正确时。
我对 flex html 文本组件也有类似的头痛。Flex 对许多 html 案例没有适当的支持。你会一直看到额外的<p>
填充<li>
。哎呀,甚至不支持<ul>
标签。如果普通文本中有换行符,flex 会在标签末尾附加额外的填充,删除此换行符将删除额外的填充。
但是,您可能想使用这样的东西:http ://code.google.com/p/flex-htmlfilter/