googleAdsense_widever


Flex :: RichEditableText Adobe Air




html 을 display 하기 위해서는 spark component 인 RichEditableText 를 사용.

mx:label 에  htmlText를 삽입하는 방식은 href 가 걸린 a 태그를 사용하지 못함.


example)
<s:RichEditableText id="rtext_text" 
left="65" right="10" top="34"
color="#AAAAAA" editable="false"
multiline="true"
minWidth="0"
lineBreak="toFit"
breakOpportunity="any"
paddingBottom="40"
>
</s:RichEditableText>

위와 같이 선언하고, html text를 삽입할 때에는 

rtext_text.textFlow = TextConverter.importToFlow(htmlStr, TextConverter.TEXT_FIELD_HTML_FORMAT, getTextFlowCfg());

위와 같이 TextConverter를 통해 String을 textFlow 형태로 변환하여 삽입.

getTextFlowCfg()는 선언된 Configuration을 가져오는 함수.
이를 통해 사용할 수 없는 css 를 대신하여 styling이 가능.


부가적으로 트위터 data를 위한 tag 처리 함수를 아래에 소개


private function linkWrapText(rawStr:String, mode:String = null):*{
var formattedStr:String = rawStr;

var urlPattern:RegExp = /((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g;
//var namePattern:RegExp = /@([A-Za-z0-9_]+)/;
var namePattern:RegExp = /@(\w+)/g;
var hashPattern:RegExp = /#(\w+)/g;

var matchedUrlArr:Array = rawStr.match(urlPattern);
var matchedNameArr:Array = rawStr.match(namePattern);
var matchedHashArr:Array = rawStr.match(hashPattern);

if(matchedUrlArr != null){
for(var i:int=0; i<matchedUrlArr.length; i++){
//formattedStr = formattedStr.replace(urlPattern, "<a href='"+matchedStrs[i]+"'>"+matchedStrs[i]+"</a>");
formattedStr = formattedStr.replace(matchedUrlArr[i], "<a href='"+matchedUrlArr[i]+"'>"+matchedUrlArr[i]+"</a>");
}}

if(matchedNameArr != null){
for(var j:int=0; j<matchedNameArr.length; j++){
formattedStr = formattedStr.replace(matchedNameArr[j], "<a href='https://twitter.com/"+matchedNameArr[j].toString().substr(1)+"'>"+matchedNameArr[j]+"</a>");
}}

if(matchedHashArr != null){
for(var k:int=0; k<matchedHashArr.length; k++){
formattedStr = formattedStr.replace(matchedHashArr[k], "<a href='http://twitaddons.com/search.php?q="+matchedHashArr[k]+"'>"+matchedHashArr[k]+"</a>");
}}

if(mode == null){
return TextConverter.importToFlow(formattedStr, TextConverter.TEXT_FIELD_HTML_FORMAT, getTextFlowCfg());
}else if(mode == 'STRING'){
return formattedStr;
}
}




** 주의할 점.
RichEditableText의 height를 지정하지말고, top이나 bottom 혹은 y 값만 선언하여 positioning 해주어야 함.
필요한 경우라면 top 대신 paddingTop, bottom 대신 paddingBottom을 이용하여 layout 을 잡아야 한다.

그렇지 않으면 lineBreak가 제대로 작동하지 않아, 한줄로 모든 텍스트가 출력되거나, 텍스트가 보이지 않음.












덧글

댓글 입력 영역


공지

어서오십시오.
트위터 : @FCliver
기저심리학 : 네이버카페
카카오톡 : FCliver
페이스북 : Fredric Cliver

통계 위젯 (화이트)

220
104
285269

접속자 위치