2011-05-04 3 views
1

동일한 문자열의 서로 다른 두 부분에 textFormat을 할당하는 데 실패했지만 두 번째로 등록되지 않고 기본 텍스트 형식으로 유지됩니다. 글꼴의 두 가지 스타일 (일반 글꼴과 굵게 글꼴)이 포함되어 있습니다.ActionScript - setTextFormat()이 (가) 동일한 문자열에서 두 번 이상?

//Create Text Field 
private function createAboutWindowTextField():TextField 
    { 
    var aboutWindowFont:Font = new AboutWindowFont(); 

    var regularFormat:TextFormat = new TextFormat(); 
    var boldFormat:TextFormat = new TextFormat(); 

    regularFormat.size = boldFormat.size = 12; 
    regularFormat.font = boldFormat.font = aboutWindowFont.fontName; 
    regularFormat.align = boldFormat.align = TextFormatAlign.CENTER; 
    boldFormat.bold = true; 

    var result:TextField = new TextField(); 
    result.antiAliasType = AntiAliasType.ADVANCED; 
    result.autoSize = TextFieldAutoSize.LEFT; 
    result.defaultTextFormat = regularFormat; 
    result.embedFonts = true; 
    result.multiline = true; 
    result.selectable = false; 
    result.type = TextFieldType.DYNAMIC; 

    result.text = "First Header\n" + 
        "Version 1.0\n" +               
        "Copyright © 2011\n\n" + 

        "Second Header:\n" + 
        "Other info";              

    result.setTextFormat(boldFormat, result.text.indexOf("First Header"), ("First Header").length); 
    result.setTextFormat(boldFormat, result.text.indexOf("Second Header:"), ("Second Header:").length); 

    return result; 
    } 

위의 코드는 모두 "먼저 헤더"를 초래한다 "둘째 헤더 :"대담 해지고 있지만, "두 번째 헤더 :"동안 만 "우선 헤더는"굵게 설정됩니다 간단히 무시 될 것으로 보인다. 뭐가 문제 야?

답변

2

setTextFormat 함수의 세 번째 매개 변수가 잘못되었습니다. 끝 색인을 얻고 자 할 때 길이를 사용하고 있습니다. 이처럼 :

var indexA:int = result.text.indexOf("Second Header:"); 
result.setTextFormat(boldFormat, indexA, indexA + ("Second Header:").length); 

은 여러 개의 글꼴 또는 글꼴 무게가있는 텍스트 필드의 형식을 StyleSheet를 사용하려면. 관리하기가 조금 쉬워졌습니다.

var reg:HelveticaReg = new HelveticaReg(); 
var bold:HelveticaBold = new HelveticaBold(); 

var format:TextFormat = new TextFormat(reg.fontName, 14, 0x000000); 

var ss:StyleSheet = new StyleSheet(); 
ss.setStyle(".bold", {fontFamily:bold.fontName}); 

var tf:TextField = new TextField(); 
tf.width = 400; 
tf.multiline = true; 
tf.wordWrap = true; 
tf.autoSize = TextFieldAutoSize.LEFT; 
tf.selectable = false; 
tf.antiAliasType = AntiAliasType.ADVANCED; 
tf.embedFonts = true; 
tf.type = TextFieldType.DYNAMIC; 
tf.defaultTextFormat = format; 
tf.styleSheet = ss; 
tf.htmlText = "<span class='bold'>Lorem ipsum dolor</span> sit amet, consectetur adipiscing elit."; 
addChild(tf); 
+0

당신은 스타일 시트와는 htmlText를 사용하지 않고 텍스트 입력란에 동일한에 textFormat의 여러 인스턴스를 적용 할 수는 없습니다 말? – TheDarkIn1978

+0

StyleSheet 솔루션의 예제를 추가했습니다. 테스트에서는 텍스트 필드의 여러 섹션에 텍스트 서식을 적용 할 수있었습니다. 어쩌면 텍스트 형식에서 "bold = true"로 설정하는 대신 굵은 글꼴에 다른 글꼴을 사용해보십시오. 테스트를 위해 굵은 체의 색상을 변경하면 색상이 올바르게 변경됩니까? – Corey

+0

아니요, 굵게 글꼴을 다른 색상으로 설정하면 두 번째도 적용되지 않습니다. 이상하게도, 일단 적용하고 result.text.indexOf ("Second Header :")로 텍스트 형식을 설정하려고하면 적용되지 않습니다. 문제가 문자열인지 궁금해? result.text.indexOf ("Second Header :") 추적은 올바른 색인을 반환합니다. – TheDarkIn1978

관련 문제