FLEX:HTMLText段落标记添加额外的换行符

时间:2012-05-23 18:58:54

标签: actionscript-3 flex adobe

好吧,我有一个有点奇怪的问题。我正在使用RichTextEditor并允许用户重新调整它的大小。所有控件都被剥离到主工具栏,使得RichTextEditor看起来就像一个包含文本的框。我有一个问题,当我保存编辑器生成的htmltext然后再重新渲染它时,它总是在文本的末尾添加一个额外的换行符。我发现这是由于段落标记,因为我希望用户能够对齐文本,我必须保留它。有没有人知道如何剥离这最后一个换行符而不剥离所有格式?

3 个答案:

答案 0 :(得分:1)

我为此修复了一个问题,基本上涉及剥离最后一个结束段落标记</P>。 RichTextEditor很难看:(

答案 1 :(得分:1)

这绝对是一个错误,它是通过设置“htmlText”属性而不是“text”属性来触发的。无论您是在代码中分配它,还是让设计者通过选中文本字段属性中的“render as html”按钮来设置“htmlText”而不是“text”,都会发生这种情况。另外值得注意的是,这只发生在“输入”类型的TextFields上。如果你从一个“动态”类型的文本字段开始,然后将“type”设置为“input”(也必须将“selectable”设置为true或者光标将是不可见的(另一个bug)),你会看到额外的行显示为right在你眼前。同样,这不会影响动态文本字段,只会影响输入模式字段。

尽管htmlText属性在两种情况下都是相同的,无论是为文本还是htmlText分配像“Hello”这样的字符串(生成的htmlText值都相同),只有在设置htmlText属性时才会出现额外的行。

具体来说,当您将htmlText设置为实际包含html段落标记的字符串时,会发生这种情况。如果您只是为htmlText分配一些文本,如“Hello”,则不会出现问题。另一方面,如果您分配了htmlText <p>Hello</p>或者您为自己分配了htmlText(您需要这样做以保留html并强制内部指标立即更新),则会出现问题。有人提到,如果省略关闭</p>标记,问题将不会发生,这是真的。同样地,分配像<a>Hello</a>这样的东西也不会触发问题。

总而言之,只有在设置自动调整大小多行 htmlText 属性时才会出现此问题,< em>输入类型文本字段为包含<p></p>标记的值。动态文本字段不会出现,也不会在未自动调整的输入文本字段中出现,也不会出现它出现在那些自动调整但没有为htmlText分配<p>标签的人身上。

要重现此问题,请在设计器中设置文本字段,并确保打开背景和轮廓以便您可以看到字段的大小,然后它将是单行高(多行文本字段)预期(假设它足够宽)。然后,如果您转到代码并设置txtfld.htmlText = txtfld.htmlText(将其设置为自身),则仅仅分配htmlText属性(对于它自己的相同值)会导致添加额外的行。并且htmlText的值实际上是相同的,它实际上并没有隐藏在额外的<p>标签或任何东西......它只是显示不应该存在的这个尾随返回。正如预期的那样,当你在文本字段的Flash属性中选中“render as html”时会出现同样的情况,这似乎会导致它设置htmlText而不是文本,并导致问题出现。

实际上不太可能存在两种渲染模式,因为它在技术上总是渲染htmlText(即htmlText总是有一个值,你总是可以使用setTextFormat设置文本某段的文本格式,最初分配了“文本“,并且不会触发某种切换到”html渲染模式“或类似的东西。

这种行为似乎严格来自于分配htmlText属性。

避免它的唯一方法(除了设置htmlText,读回值,剥离最后一个</p>标记并重新分配它),只需将所有文本字段初始化为纯文本字段,然后通过调用setTextFormat(TextFormat,beginIndex,endIndex)手动应用格式。

正如在原始问题帖子中提到的,这个错误的真正的灾难是你无法保存和恢复TextField的htmlText值,因为将htmlText设置为包含html的字符串(特别是p标签)会导致这个额外的要添加的行,如果你特别希望文本字段的大小合适,那么你可能已经开启了自动调整大小,特别是当这个问题悄悄上升并确保大小不正确时。

答案 2 :(得分:0)

我对flex html文本组件有类似的头痛。 Flex对许多html案例没有适当的支持。您会一直看到<p><li>的额外填充。哎呀,甚至都没有支持<ul>标签。如果普通文本中有换行符,flex会在标记的末尾添加额外的填充,删除此换行符将删除额外的填充。

但是,您可能希望使用以下内容:http://code.google.com/p/flex-htmlfilter/