因为任务需要,需要在air桌面程序中显示所有系统字体。在air中动态创建一个文本,然后获取系统字体列表,在通过TextFormat对象的font将这个动态问本框的字体设置为某种系统字体。
哦,真是一个简单的工作。可是谁有料到半路杀出的怪问题:我动态创建的动态文本框尽然在显示字体的时候不能正常显示系统字体,现象是: 我将文本的字体设置为宋体和设置为华文琥珀时,这个动态文本框里面显示的字形尽然是一样的 ,真是晕倒。
无奈我就用swf测试这个读取系统字体并能动态更改文本框内字体的功能,测试结果出乎我所料,我原以为swf(在本地)完成不了这个工作,结果它是可以更改字体的。这就怪了,为什么swf可以air反而不行呢?这里说明一下,我用flashcs4开发air同样swf也是cs4开发的而我的air运行时是最新的1.5版。
这个问题困扰了我一两天,最后我觉得air可能有问题,或者adobe air自身就有这个缺陷,因为我是在找不到解决的办法或回答这个问题的答案。
无奈之余,我用了我常用的,也是我称之为最古老的方法,我将一个有舞台创建的动态文本框放在一个由舞台创建的Sprite中,然后这个Sprite和我的原来动态创建动态文本框的那个Sprite子类相关联,我想如果不行就算了。因为我在解决这个问题的时候请教了几位朋友,他们说,尽量使用Tahoma或宋体作为动态文本的字体,或者就是嵌入字体了。我想这可能就是最坏的结局。
测试这个和库中包含一个动态文本框的Sprite相绑定的类时,让人惊喜的现象出现了,我更改字体,只要是flash cs4里面的静态字体能正常显示字形的,我这个动态文本框就能正常显示字形。太棒了,我搞定了困扰我几天的问题。
这个问题,我没有百度到,也没有google到,希望我写在这个能给遇到这个问题的朋友一点帮助
注意一点:如果文本框在建立的时候用的默认字体不是中文字体的话,就不能动态替换中文字体