在使用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中,所以只要寫對路徑就可以了,這個網上很容易搜索到比如這裏