日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
學(xué)習(xí)總結(jié) 在Flex中如何嵌入Flex字體

本文和大家重點(diǎn)討論一下在Flex中嵌入Flex字體方法,在Flex中所有非系統(tǒng)安裝Flex字體都需要注冊后才能使用。希望本文的介紹能讓你有所收獲。

在Flex中嵌入Flex字體方法總結(jié)

嵌入Flex字體

語法

 
 
 
  1. [Embed(source="C:/WINDOWS/Fonts/arial.ttf",   
  2. fontName="Arial",  
  3.  mimeType="application/x-font")]  
  4.  
  5. private var ArialFont:Class;  

source: 字體文件所在路徑(本地)
fontName: 程序中所使用的字體別名
mimeType: 照抄就行了=_=

其中source還可以是指定為字體名稱,而不一定是字體文件.另外還有其它屬性可以設(shè)置,詳細(xì)查看這里

在Flex中所有非系統(tǒng)安裝Flex字體都需要注冊后才能使用。對于一個(gè)用上述方法直接嵌入字體的Flex程序,該嵌入字體會被自動(dòng)注冊。
可以通過以下程序查詢:

 
 
 
  1. var font_list:Array = Font.enumerateFonts();  
  2.  
  3. for(var i:int=0; i
  4.  
  5.     trace(Font(font_list[i]).fontName);  
  6.  

 嵌入的Flex字體會排列在前面.

◆問題是,如果系統(tǒng)里面有這個(gè)字體,我何必還要去嵌入呢?

假如你的系統(tǒng)里面有個(gè)奇怪的字體,當(dāng)你肆無忌憚的用在了你的項(xiàng)目里,而整個(gè)作品仍到網(wǎng)上后,其它用戶的機(jī)器里面沒有這個(gè)奇怪的字體,他們可能就看不到,或者看到的是他們系統(tǒng)中所帶字體顯示出來的文字。這顯然不是你想要的,所以,在使用一些別人可能沒有的字體時(shí),嵌入是很有必要的.但如果就這樣直接嵌入,最直接的影響就是加大swf文件的大小.可憐我們這些用漢字的,一個(gè)中文字體動(dòng)不動(dòng)就幾M...orz.如果一個(gè)項(xiàng)目有一堆swf要用幾個(gè)相同的中文字體,每個(gè)swf都嵌一遍,估計(jì)這個(gè)項(xiàng)目加起來不會比帝國時(shí)代來的小-_-.說的再技術(shù)性一點(diǎn),這么做還不便于維護(hù),修改等等......
此類問題可算是老生常談了,所以我們要做的辦法就是共享字體.

這個(gè)方法在flash里面很簡單,只要在庫中選擇添加新字體,然后選擇自己要的字體,修改元件屬性為共享導(dǎo)出,最后發(fā)布就行了.具體看這里

整個(gè)過程就是如何去使用共享庫,這個(gè)技術(shù)很古老了,但還是很管用的,到了Flex2,這個(gè)過程實(shí)際上更簡單了,如果有flash的朋友,可以直接看Flex的幫助 - 如何使用flash類型的字體

我這里要講的是,不用flash,直接用Flex完成所有動(dòng)作.

首先,挑個(gè)要嵌入的Flex字體,比如04b_08,這個(gè)字體不是每個(gè)人都裝的.因?yàn)镕lex可以用程序來支持直接嵌入字體,所以挑的字體不管是否已經(jīng)安裝在系統(tǒng)中,都是無所謂的.測試的時(shí)候,你也可以把安裝在系統(tǒng)中的字體先刪除(記得備份),有些系統(tǒng)字體是無法刪除的,比如Arail,Verdana,宋體等.

接著,建立一個(gè)as文件,叫FontAssets.as好了,寫入如下代碼后保存 package

 
 
 
  1. {  
  2.  
  3.     import flash.display.Sprite;  
  4.  
  5.     public class FontAssets extends Sprite  
  6.  
  7.     {  
  8.  
  9.         [Embed(source="assets/04b_08.ttf", fontName="04b_08", mimeType="application/x-font")]  
  10.  
  11.         public var PixelFont:Class;  
  12.  
  13.     }  
  14.  
  15. }  

as3語法我就不多說了,不清楚的看這里

◆為什么要繼承Sprite呢?

因?yàn)檫@個(gè)swf文件要在以后的程序中被加載.被加載的swf基類必須是繼承Sprite的.你不信的可以試試不繼承,這個(gè)swf可以通過編譯,但加載他的就無法通過編譯了,如果關(guān)掉嚴(yán)格檢測,運(yùn)行時(shí)就會拋異常...
其實(shí)嘛,想想flash,root的類型就是MovieClip,是必然存在的,所以要生成一個(gè)swf,必須繼承Sprite也是合理的.因?yàn)樵赼s3里面,MovieClip是繼承Sprite的

◆兩個(gè)字體對象,為什么要聲明為public呢?

因?yàn)榈綍r(shí)候要在外部訪問這兩個(gè)對象呀.當(dāng)然,有心人也可以用getter方法來設(shè)置成為"只讀"的,我這里就懶一下了^^_.

接著,建立一個(gè)mxml文件,叫testSharedFonts.mxml.寫入以下代碼并保存

 
 
 
  1.  
  2. xmlns:mx="http://www.adobe.com/2006/mxml"   
  3. layout="absolute" 
  4. styleName="plain" 
  5.    
  6.   
  7.     private function fontLoadComplete(evt:Event):void  
  8.     {  
  9.        try{  
  10.         Font.registerFont( evt.target.content["PixelFont"] );  
  11.  
  12.         txt1.setStyle("fontFamily", "04b_08");  
  13.        }  
  14.        catch(e:Error){  
  15.         trace(e.toString());  
  16.        }  
  17.     }  
  18.   ]]> 
  19.    
  20.      
  21.      
  22.          
  23.          
  24.      
  25.  
  26.  

 ◆Flex字體嵌入成功,要注意以下幾點(diǎn)

1.注冊字體的時(shí)候,訪問PixelFont的方法是當(dāng)初AS2時(shí)候典型的作弊方法,目的為了騙過編譯器,省的它說,當(dāng)前對象沒有這個(gè)變量或方法.但是 AVM2比較牛,如果訪問的變量或方法確實(shí)不存在或者是訪問權(quán)限不對,它會在運(yùn)行時(shí)拋異常,這也是為什么,上面我要聲明為public的原因!

2.加載進(jìn)來的共享字體,一定要先注冊才能使用,對于FontAssets.swf,前面說過,當(dāng)PixelFont在嵌入的同時(shí)就已經(jīng)注冊好了,但是對于testSharedFonts.swf,則不是,所以加載完了FontAssets.swf之后,還要注冊.

3.一個(gè)FontAssets可以同時(shí)嵌入多個(gè)字體,這樣就可以形成一個(gè)共享字體庫,但要注意如果字體太多,這個(gè)庫(swf文件)也會變的很大.

【編輯推薦】

  1. Flex滾動(dòng)條常見問題解答
  2. FlexBuilder4十大新特性閃亮登場
  3. 學(xué)習(xí)筆記 Flex中設(shè)置Flex滾動(dòng)條的樣式
  4. 揭開Flex正則表達(dá)式的神秘面紗
  5. FlexBuilder開發(fā)方法及特點(diǎn)解析 

分享題目:學(xué)習(xí)總結(jié) 在Flex中如何嵌入Flex字體
標(biāo)題路徑:http://www.dlmjj.cn/article/dhesphp.html