在TextArea中使用embedFonts以及asfunction的步骤
在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中,所以只要写对路径就可以了,这个网上很容易搜索到比如这里