본문 바로가기

Actionscript3.0

긴 길이의 String을 TextField에 나타내기 위한 메소드

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 값을 체크하여 어느 정도의 문자까지 입력 할수 있는지 확인하는 메소드를 만들어 보았습니다. 
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));		
메소드의 파라미터로 TextField를 넘겨 주는 이유는 TextField가 가지고 있는 TextFormat에 따라 textWidth 값이 달라지기 때문 입니다. 요즘 들어 String을 처리 해야 하는 일이 많아 지네요. 좀 정리좀 해야 겠습니다.