Metin biçimlendirme

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Metnin görüntülenmesini programlama yoluyla formatlamak için birkaç seçeneğiniz bulunmaktadır. TextFIeld.thickness , TextField.textColor ve TextField.textHeight gibi özellikleri doğrudan TextField örneğinde ayarlayabilirsiniz.Veya metin alanının içeriğini htmlText özelliğini kullanarak belirleyebilir ve b , i ve u gibi desteklenen HTML etiketlerini kullanabilirsiniz. Ancak aynı zamanda, düz metin içeren metin alanlarına TextFormat nesneleri veya htmlText özelliğini içeren metin alanlarına StyleSheet nesneleri uygulayabilirsiniz. TextFormat ve StyleSheet nesnelerinin kullanılması, uygulamanız genelinde metin görünümü açısından en fazla denetimi ve tutarlılığı sağlar. Bir TextFormat veya StyleSheet nesnesi tanımlayabilir ve bunu uygulamanızdaki birçok metin alanına veya tüm metin alanlarına uygulayabilirsiniz.

Metin biçimlerini atama

TextFormat sınıfını, birkaç farklı metin görüntüsü özelliği ayarlamak ve bunları bir TextField nesnesinin tüm içeriğine veya bir metin aralığına uygulamak için kullanabilirsiniz.

Aşağıdaki örnek, bir TextFormat nesnesini bir TextField nesnesinin tümüne uygular ve ikinci bir TextFormat nesnesini söz konusu TextField nesnesinin içindeki bir metin aralığına uygular:

var tf:TextField = new TextField(); 
tf.text = "Hello Hello"; 
 
var format1:TextFormat = new TextFormat(); 
format1.color = 0xFF0000; 
 
var format2:TextFormat = new TextFormat(); 
format2.font = "Courier"; 
 
tf.setTextFormat(format1); 
var startRange:uint = 6; 
tf.setTextFormat(format2, startRange); 
 
addChild(tf);

TextField.setTextFormat() yöntemi, yalnızca zaten metin alanında görüntülenen metni etkiler. TextField içeriği değişirse, uygulamanızın formatlamayı yeniden uygulamak için TextField.setTextFormat() yöntemini tekrar çağırması gerekebilir. Ayrıca, TextField defaultTextFormat özelliğini, kullanıcı tarafından girilen metin için kullanılacak formatı belirtecek şekilde de ayarlayabilirsiniz.

Basamaklı stil sayfaları uygulama

Metin alanları, düz metin veya HTML formatlı metin içerebilir. Düz metin, örneğin text özelliğinde saklanır ve HTML metni, htmlText özelliğinde saklanır.

CSS stili bildirimlerini, birçok farklı metin alanına uygulayabileceğiniz metin stillerini tanımlamak için kullanabilirsiniz. CSS stil bildirimleri, uygulama kodunuzda oluşturulabilir veya harici bir CSS dosyasından çalışma zamanında yüklenebilir.

flash.text.StyleSheet sınıfı, CSS stillerini işler. StyleSheet sınıfı, sınırlı bir CSS özellikleri kümesini tanır. StyleSheet sınıfının desteklediği stil özelliklerinin ayrıntılı listesi için, ActionScript 3.0 Başvurusu'ndaki flash.textStylesheet girişine bakın.

Aşağıdaki örnekte gösterildiği gibi, CSS'i kodunuzda oluşturabilir ve bu stilleri bir StyleSheet nesnesi kullanarak HTML metnine uygulayabilirsiniz:

var style:StyleSheet = new StyleSheet(); 
 
var styleObj:Object = new Object(); 
styleObj.fontSize = "bold"; 
styleObj.color = "#FF0000"; 
style.setStyle(".darkRed", styleObj); 
 
var tf:TextField = new TextField(); 
tf.styleSheet = style; 
tf.htmlText = "<span class = 'darkRed'>Red</span> apple"; 
 
addChild(tf);

Örnek kod, bir StyleSheet nesnesi oluşturduktan sonra, bir stil bildirim özellikleri kümesini tutmak için basit bir nesne oluşturur. Daha sonra bu, yeni stili ".darkred" adıyla stil sayfasına ekleyen StyleSheet.setStyle() yöntemini çağırır. Ardından, StyleSheet nesnesini TextField styleSheet özelliğine atayarak stil sayfası formatlamasını uygular.

CSS stillerinin etkili olması için, stil sayfasının, htmlText özelliği ayarlanmadan önce TextField nesnesine uygulanması gerekir.

Tasarım gereği, bir stil sayfasına sahip bir metin alanı düzenlenebilir değildir. Bir girdi metni alanınız varsa ve buna bir stil sayfası atarsanız; metin alanı, stil sayfasının özelliklerini gösterir, ancak kullanıcının metin alanına yeni metin girmesine izin vermez. Ayrıca, aşağıdaki ActionScript API'lerini, atanmış bir stil sayfasına sahip bir metin alanında kullanamazsınız:

  • TextField.replaceText() yöntemi

  • TextField.replaceSelectedText() yöntemi

  • TextField.defaultTextFormat özelliği

  • TextField.setTextFormat() yöntemi

Bir metin alanına bir stil sayfası atanır, ancak daha sonra TextField.styleSheet özelliği null olarak ayarlanırsa, hem TextField.text hem de TextField.htmlText özelliği, önceden atanan stil sayfasının formatlamasını dahil etmek üzere etiketler ve nitelikler ekler. Orijinal htmlText özelliğini korumak için, stil sayfasını null olarak ayarlamadan önce özelliği bir değişkenin içine kaydedin.

Harici bir CSS dosyası yükleme

Formatlamaya yönelik CSS yaklaşımı, çalışma zamanında harici bir dosyadaki CSS bilgilerini yükleyebildiğinizde daha güçlü hale gelir. CSS verileri uygulama için harici olduğunda, ActionScript 3.0 kaynak kodunuzu değiştirmeye gerek duymadan metninizin görsel stilini uygulamanızda değiştirebilirsiniz. Uygulamanız konuşlandırıldıktan sonra, uygulamanın görünümünü değiştirmek için, uygulama SWF dosyasını yeniden konuşlandırmaya gerek duymadan harici bir CSS dosyasını değiştirebilirsiniz.

StyleSheet.parseCSS() yöntemi, CSS verileri içeren bir dizeyi StyleSheet nesnesinde stil bildirimlerine dönüştürür. Aşağıdaki örnek, harici bir CSS dosyasının nasıl okunacağını ve stil bildirimlerinin bir TextField nesnesine nasıl uygulanacağını gösterir:

İlk olarak, yüklenecek olan example.css adlı CSS dosyasının içeriği aşağıda verilmiştir:

p { 
    font-family: Times New Roman, Times, _serif; 
    font-size: 14; 
} 
 
h1 { 
    font-family: Arial, Helvetica, _sans; 
    font-size: 20; 
    font-weight: bold; 
} 
 
.bluetext { 
    color: #0000CC; 
}    

Bunu, example.css dosyasını yükleyen ve stilleri TextField içeriğine uygulayan bir sınıfın ActionScript kodu izler:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.text.StyleSheet; 
    import flash.text.TextField; 
    import flash.text.TextFieldAutoSize; 
 
    public class CSSFormattingExample extends Sprite 
    { 
        var loader:URLLoader; 
        var field:TextField; 
        var exampleText:String = "<h1>This is a headline</h1>" +  
            "<p>This is a line of text. <span class='bluetext'>" + 
            "This line of text is colored blue.</span></p>"; 
         
        public function CSSFormattingExample():void 
        { 
            field = new TextField(); 
            field.width = 300; 
            field.autoSize = TextFieldAutoSize.LEFT; 
            field.wordWrap = true; 
            addChild(field); 
             
            var req:URLRequest = new URLRequest("example.css"); 
             
            loader = new URLLoader(); 
            loader.addEventListener(Event.COMPLETE, onCSSFileLoaded); 
            loader.load(req); 
        } 
         
        public function onCSSFileLoaded(event:Event):void 
        { 
            var sheet:StyleSheet = new StyleSheet(); 
            sheet.parseCSS(loader.data); 
            field.styleSheet = sheet; 
            field.htmlText = exampleText; 
        } 
    } 
}

CSS verileri yüklendiğinde, onCSSFileLoaded() yöntemi, stil bildirimlerini StyleSheet nesnesine aktarmak için StyleSheet.parseCSS() yöntemini çalıştırır ve çağırır.

Bir metin alanında metin aralıklarını formatlama

setTextFormat() , flash.text.TextField sınıfının kullanışlı bir yöntemidir. setTextFormat() yöntemini kullanarak, kullanıcı girdisine yanıt vermek amacıyla bir metin alanının bir parçasının içeriğine, kullanıcılara belirli girişlerin zorunlu olduğunu hatırlatması veya kullanıcı metnin bir parçasını seçtiğinde bir metin parçasının alt bölümündeki vurguyu değiştirmesi gereken formlar gibi belirli özellikler atayabilirsiniz.

Aşağıdaki örnek, kullanıcı metin alanını tıklattığında myTextField içeriğinin bir parçasının görünümünü değiştirmek için bir karakter aralığı üzerinde TextField.setTextFormat() kullanır:

var myTextField:TextField = new TextField(); 
myTextField.text = "No matter where you click on this text field the TEXT IN ALL CAPS changes format."; 
myTextField.autoSize = TextFieldAutoSize.LEFT; 
addChild(myTextField); 
addEventListener(MouseEvent.CLICK, changeText); 
 
var myformat:TextFormat = new TextFormat(); 
myformat.color = 0xFF0000; 
myformat.size = 18; 
myformat.underline = true; 
 
function changeText(event:MouseEvent):void 
{ 
    myTextField.setTextFormat(myformat, 49, 65); 
}