Apache flex 从textfield中删除最后一个字符而不销毁textformat
我有一个问题,我想删除具有多个文本格式的文本字段(包括换行符)的最后一个字符,而不删除格式 到目前为止,我已经:Apache flex 从textfield中删除最后一个字符而不销毁textformat,apache-flex,flash,actionscript-3,Apache Flex,Flash,Actionscript 3,我有一个问题,我想删除具有多个文本格式的文本字段(包括换行符)的最后一个字符,而不删除格式 到目前为止,我已经: textfield.replaceText(textField.length-1,textField.length-1,''); 我猜这不会删除换行符,而且速度很慢,似乎会破坏我的文本格式 或: 这会更快,但也会删除所有文本格式。我希望我能正确理解您的问题。如果将格式保留在htmlText中,我有一个可能的解决方案: 其思想是将格式化文本保持为XML格式,并修改XML。XML将保持
textfield.replaceText(textField.length-1,textField.length-1,'');
我猜这不会删除换行符,而且速度很慢,似乎会破坏我的文本格式
或:
这会更快,但也会删除所有文本格式。我希望我能正确理解您的问题。如果将格式保留在htmlText中,我有一个可能的解决方案: 其思想是将格式化文本保持为XML格式,并修改XML。XML将保持您的格式不变,您不必使用字符串特技飞行来维护它们。缺点当然是必须保持格式化XML的有效性,以及额外的变量 下面是一个例子:
var tf:TextField = new TextField();
var t:XML = new XML("<html><p>lalala</p><font color='#ff0000'> lol</font></html>");
tf.htmlText = t.toXMLString();
t.font[0] = t.font[0].text().slice(0, -1);
tf.htmlText = t.toXMLString();
addChild(tf);
var-tf:TextField=newtextfield();
var t:XML=newxml(“lalalalol”);
tf.htmlText=t.toXMLString();
t、 font[0]=t.font[0].text().slice(0,-1);
tf.htmlText=t.toXMLString();
addChild(tf);
这有点乏味,但是您可以使用TextField的htmlText
-属性,即使您没有使用样式表格式化文本:Flash将在内部将所有格式化信息转换为HTML文本,因此,即使您设置了TextField.text
,您仍然可以使用xml格式的文本:
textField.text = "A test.";
trace (textField.htmlText);
将实际返回:
<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">A test.</FONT></P>
谢谢,但是我没有在这个项目中使用htmlText,我想这将意味着对我相当庞大的项目进行重大的重写。我只是在寻找一个更简单的解决方案,这样我就可以删除文本字符串末尾的字符(或换行符),而不必完全删除文本字段中的所有文本格式。是否可以查看更多的代码片段,了解如何设置多个文本格式?嗯,在这里发布有点复杂,但它涉及一个XML、一个段落句柄类、一个扩展的textfield类和一堆代码。基本上,我从xml中获取文本字段(动态创建)的格式,我有一系列用于更改字体、大小、行距和颜色的控件(支持多种颜色:cmyk、rgb、pms等)。我将textformat类转换为xml以存储我的设置。我使用相同的方法保存“段落样式”,它本身更具动态性。为了使这个简短,我制作了一个专门用于打印的类似单词的应用程序。基本上,我通过调用一堆textfield.setTextFormat(theTextFormat,startindex,endindex)来设置我的textformat;这个项目非常复杂,我真的希望避免使用htmlText,因为我认为这只会使我的项目更加复杂,带来非常小的好处。如果我不能在本地重现类似的场景,我无法集思广益帮助您找到解决方案,对不起:(我希望其他人也会遇到类似的情况并分享经验。这可能真的有效,我怀疑这对我的问题来说会很慢。我需要将文本包含在文本字段中,这样它就不会溢出。当前的解决方案是,当文本字段大于其容器时,我删除最后一个字符。也许我可以得到一个通过其他方式解决这个问题。现在我面临一个新问题,textfield类的字体大小限制为127,可能必须切换到TLF。这真是一场噩梦……不会很慢。XML转换是通过Flash完成的。你可以通过缩放textfield来绕过大小限制:字体大小为128,fo例如,字体大小:64,比例为2。您可以使用相同的解析机制将所有字体大小乘以一个比例因子,因此小于127的所有字体看起来都一样。抱歉,我刚刚重新阅读了您的评论…为什么不使用getCharIndexAtPoint?通过缩放,您的意思是缩放整个文本字段?不知道这是否可行因为我需要能够在同一文本字段中有多个字体大小。例如,我可以有一行字体大小为124,另一行字体大小为300。缩放整个文本字段意味着我必须重新计算较低的字体大小,并将其放大,以便较大的字体是正确的。getCharIndexAtPoint如何解决此问题失去了文本格式?Woa,两年后被否决了…给了什么?
<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">A test.</FONT></P>
private function removeLastCharacter (textField:TextField) : void {
var xml:XML = new XML (textField.htmlText);
for ( var i : int = xml.children().length()-1; i >= 0; i-- ){
var node:XML = xml.children()[i];
if ( node.name() == "FONT") {
var tx:String = node.text()[0].toString();
node.setChildren (tx.substr (0, tx.length-1));
break;
}
}
textField.htmlText = xml;
trace (textField.text); // In the above example, output will be: "A test";
}