欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-05 14:50:45
...

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

相关标签: flash