Javascript나 Actionscript에서 긴 길이의 문자열을 고정된 너비의 TextField에 집어 넣으려면 substr(startIndex,length) 이나 substring(startIndex,endIndex)을 사용합니다. 원하는 문자의 길이 만큼 파라 미터를 넘겨서 처리 하면 손 쉽게 해결 됩니다.
var field:TextField = new TextField(); addChild(field); var str:String = "Flash Actionscript3.0 플레시 액션스크립트"; field.text = str.substring(0,20);하지만, 위와 같은 방법에는 치명적인 단점이 있습니다. 영어와 한글의 너비값이 차이가 있기 때문에, 영문의 10글짜와 한글의 10글짜의 너비는 큰 차이가 나게 됩니다. 하나의 문자로만 사용하는 경우에는 상관없겠지만, 항상 한글만 쓰거나 하는 경우는 극히 드물고, 특수문자도
하나의 문자로 인식 하기 때문에 substring 이나 substr 만 가지고는 해결 할 수가 없습니다. 그래서 textfield에 문자를 미리 입력 한 후에 textWidth 값을 체크하여 어느 정도의 문자까지 입력 할수 있는지 확인하는 메소드를 만들어 보았습니다.
메소드의 파라미터로 TextField를 넘겨 주는 이유는 TextField가 가지고 있는 TextFormat에 따라 textWidth 값이 달라지기 때문 입니다.
요즘 들어 String을 처리 해야 하는 일이 많아 지네요. 좀 정리좀 해야 겠습니다.
function longStringDot(_field : TextField,_str:String, _width : int):int { var str_len:int; for(var i:int =0; i < _str.length; i++ ){ _field.text = _str.substr(0,i); if(_field.textWidth > _width){ str_len = i; break; } } return (str_len == 0)? _str.length : str_len; }보통 substring 을 이용하여 아래와 같이 코딩을 하지만,
var str:String = ""; var maxLen:int = 20; // 문자열이 들어 가는 공간크기를 일일히 맞춰줘야 하는 번거로움이 있다. var feild:TextField = new TextField(); if(str.length > maxLen) feild.text = str.substring(0,maxLen); else feild.text = str;
var str:String = ""; var maxWidth:int = 100; var feild:TextField = new TextField(); feild.text = str; if(feild.textWidth > maxWidth) feild.text = str.substring(0,longStringDot(feild,str,maxWidth));
'Actionscript3.0' 카테고리의 다른 글
타임라인에서 일어 나는 동작을 알려주는, TimelineWatcher (2) | 2009.03.30 |
---|---|
숫자에 1000단위 콤파(,)를 넣어주는 방법 -AS3.0 (3) | 2009.03.15 |
왜 Actionscript 3.0을 사용해야만 하는가? (15) | 2009.02.06 |