TextArea中使用embedFonts以及asfunction

在使用TextArea 的時候,如果需要嵌入字體,要通過V2 style來設置.

myTextArea.setStyle("fontFamily", "myFont");
myTextArea.setStyle("embedFonts",true);

這沒什麼好說的,普通TextField能成功,TextArea就不會出問題.但是當設置html=true的時候,就不對了...經過幾番測試,發現並不是embedFonts沒有起作用,而是fontFamliy沒有起作用!

myTextArea.setStyle("fontFamily", "Arial");
myTextArea.html = true;
myTextArea.text = "abcdefg";
trace(myTextArea.text);

輸出發現,FONT FACE還是_sans.
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="_sans" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">asdfasdf</FONT></P></TEXTFORMAT>

這些是flash在TextField.html設置爲true後自動爲htmlText加上的一些style.TextArea只不過是封裝了htmlText.

但爲什麼不行了呢?我也沒仔細研究,估計是mx.controls.TextArea的draw方法中的setTextFormat引起的.我這猜的,沒有證實過^^_.
解決方法非常簡單,就是自己定義FONT FACE,比如

myTextArea.html=true;
myTextArea.text="<font face=/"myFont/">abcdefg</font>";

或者
import TextField.StyleSheet;
var css_str:String = "p {font-family: myFont; font-size: 24px; font-weight: bold; }";
var my_styleSheet:StyleSheet = new StyleSheet();
if (my_styleSheet.parseCSS(css_str)) {
   myTextArea.styleSheet = my_styleSheet;
   myTextArea.text = "<p>abcdegf</p>";
}

隨便怎麼樣設置都行,只要把字體改成嵌入的字體名稱就可以了.
這個在網上找了半天都沒找到具體解決方法,可能太顯而易見了或者我的搜索技巧實在不行orz...所以在這裏記一下.

另外一個在TextArea中使用asfunction的問題,其實就是一個路徑問題,因爲asfunction:functionName,相當於執行this["functionName"]();而這個this,是指TextField所在的地方,也就是TextArea~,但定義的function肯定不會是在TextArea中,所以只要寫對路徑就可以了,這個網上很容易搜索到比如這裏

發佈了43 篇原創文章 · 獲贊 0 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章