flash textfiled换行 以及\r和\n区别

flash.text.TextField.wordWrap(value:Boolean):void

一个布尔值,表示文本字段是否自动换行。如果 wordWrap 的值为 true,则该文本字段自动换行;如果值为 false,则该文本字段不自动换行。默认值为 false。

 

flash.text.TextField.multiline(value:Boolean):void

表示字段是否为多行文本字段。如果值为 true,则文本字段为多行文本字段;如果值为 false,则文本字段为单行文本字段。在类型为 TextFieldType.INPUT 的字段中,multiline 值将确定 Enter 键是否创建新行(如果值为 false,则将忽略 Enter 键)。如果将文本粘贴到其 multiline 值为 false 的 TextField 中,则文本中将除去新行。

 

一、支持换行使用wordWrap为true即可。如果是输入型textfield,支持ENTER键换行,设置multiline为true即可。

 

另外比较烦的问题是输入一个汉字后,一直输入英文字符,当本行显示不下时,自动换行会把汉字留在第一行,所有英文字符换到第一行。比如:

xxxxxxxxxxxxxxxxxxxxxxxxx

 

解决办法就是自己根据宽度末尾加\n

参考链接http://bbs.9ria.com/thread-275089-1-1.html

var _textField:TextField = new TextField();

 

private funciton txtCompleHandler():void

{

//记录文本  

var str:string = _textField.text;

//记录单行宽度

var addLen:int = 0;

//下面神奇的事情出现了

for(var i:int = 0;i<str.length;i++)

{

addLen += _textField.getCharBoundaries(i).width;

if(addLen >_textField.textWidth)

{

  var ss:string = str.chatAt(i-1) + "\n";

//在指定位置插入换行

_textField.replaceText(i-1,i,ss);

//清理记录

addLen = 0;

}

}

}

 

二、注意replaceText(beginIndex:int, endIndex:int, newText:String)

使用newText替换包含起点,不包含终点的那一段字符

比如abcdefg

replaceText(2,3,"x");//abxdefg

replaceText(2,4,"x");//abxefg

replaceText(2,2,"x");//abxcdefg

当一个textfield多次执行replaceText时,其text属性是一直在变化的。所以在循环开始前,要使用一个string变量来保存textfiled.text.另外,因为index会变化,所以尽量从后往前替换 

 

三、textfiled会自动把字符中的\n变成\r,测试如下:

var tf:TextField = new TextField();

tf.textColor = 0xffffff;

tf.text = "ab\ncd";

var txt:String = tf.text;

for(var i:int = 0;i<txt.length;i++){

if(txt.charAt(i) == "\n"){

trace("nnnn");

}else if(txt.charAt(i) == "\r"){

trace("rrrr");

}else if(txt.charAt(i) == " "){

trace("space");

}else{

trace("word",txt.charAt(i));

}

}

意外地发现trace出来的竟然是\r

四、\n和 \r区别

参考http://www.jianshu.com/p/23804b0b03c8

\r : return 到当前行的最左边。

\n: newline 向下移动一行,并不移动左右。

Linux中\n表示回车+换行;

Windows中\r\n表示回车+换行。

Mac中\r表示回车+换行。

再来看看咱们开头举得那个栗子:

printf aaaa \r\n bbbbbb

print ccccc \n ddddddd

print eeeeeeeee \r ffffff

编程时(无论是windows系统还是linux系统)

\r 就是return 回到本行行首,这就会把这一行以前的输出覆盖掉,具体内部细节就像是输出缓冲区重新开始缓冲了一样

而\n 是换行+回车,把光标先移到下一行,然后换到行首->也就是下一行的行首

结果是下面这样

aaaa

bbbbbb

ccccc

ddddddd

ffffff

猜你喜欢

转载自smartblack.iteye.com/blog/2306122