您的位置:首页 > 其它

扩展TextField,合理计算中文字符长度(转)

2011-03-12 16:43 197 查看
本文转自http://l4cd.net/blog/post-old-139.html, 如需转载或引用请标明作者和出处。
//Copyright © 2009. Http://L4cd.Net All Rights Reserved.
package net.L4cd.display
{
import flash.events.Event;
import flash.events.TextEvent;
import flash.text.TextField;
import flash.utils.ByteArray;

/**
* 扩展TextField类,中文以2字符长度计算
*
* @author L4cd.Net
* @playerversion Flash player 9
* @langversion 3.0
* @version 2009-06-16
*/
public class TextFieldExt extends TextField
{
private var _maxChars:int = -1;
public function TextFieldExt()
{
super();

}
override public function get maxChars():int
{
return _maxChars;
}
override public function set maxChars(value:int):void
{
_maxChars = value;
if(maxChars<0)
{
removeEventListener(TextEvent.TEXT_INPUT,input);
}else
{
addEventListener(TextEvent.TEXT_INPUT,input);
text = getTextByCharLength(text,maxChars);
}
}
override public function get length():int
{
return getCharLength(text);
}
private function input(e:TextEvent):void
{
//拦截并阻止textinput事件,手动处理内容输入
var textField:TextField = e.currentTarget as TextField;
var temp:String = getTextByCharLength(e.text,maxChars - getCharLength(text) + getCharLength(selectedText));
var index:int = selectionBeginIndex;
replaceText(selectionBeginIndex,selectionEndIndex,temp);
setSelection(index+temp.length,index+temp.length);
dispatchEvent(new Event(Event.CHANGE,true));
e.preventDefault();
}
/**
* 获取字符长度,一个中文算2长度
* @param txt
* @return 返回长度值
*/
private function getCharLength(txt:String):int
{
var byte:ByteArray = new ByteArray();
byte.writeMultiByte(txt,"gb2312");
byte.position = 0;
return byte.bytesAvailable;
}
/**
* 截取指定长度的文本内容,一个中文算2长度
* @param txt 需要截取的文本
* @param length 需要截取的长度
* @return 截取后的内容
*/
private function getTextByCharLength(txt:String,length:int):String
{
if(length<1)return "";
var byte:ByteArray = new ByteArray();
byte.writeMultiByte(txt,"gb2312");
byte.position = 0;
return byte.readMultiByte(Math.min(length,byte.bytesAvailable),"gb2312");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息