標籤:
Android字型簡介Android系統預設支援三種字型,分別為:“sans”,“serif”,“monospace”。
android.graphic.typeface字型類:
本類的常量靜態定義,首先為字型類型(typeface)名稱
TypefaceDEFAULT
Typeface DEFAULT_BOLD
Typeface MONOSPACE
TypefaceSANS_SERIF
Typeface SERIF
字型風格(style)名稱
intBOLD
int BOLD_ITALIC
int ITALIC
int NORMAL
設定TextView的字型可以通過TextView中的setTypeface方法來指定一個Typeface對象,因為Android的字型類比較簡單,我們列出所有成員方法:
staticTypeface create(Typeface family, int style)//靜態方法,參數一為字型類型這裡是Typeface的靜態定義,如宋體,參數二風格,如粗體,斜體
staticTypeface create(String familyName, int style)//靜態方法,參數一為字型名的字串,參數二為風格同上,這裡我們推薦使用上面的方法。
staticTypeface createFromAsset(AssetManager mgr, String path)//靜態方法,參數一為AssetManager對象,主要用於從APK的assets檔案夾中取出字型,參數二為相對於Android工程下 的assets檔案夾中的外掛字型檔的路徑。
staticTypeface createFromFile(File path)//靜態方法,從檔案系統構造一個字型,這裡參數可以是sdcard中的某個字型檔
staticTypeface createFromFile(String path) //靜態方法,從指定路徑中構造字型
staticTypeface defaultFromStyle(int style) //靜態方法,返回預設的字型風格
intgetStyle() //擷取當前字型風格
finalboolean isBold() //判斷當前是否為粗體
finalboolean isItalic() //判斷當前風格是否為斜體
Android字型工作原理
android字型由android 2D圖形引擎skia實現,並在Zygote的Preloading classes中對系統字型進行load。
相關檔案有:skTypeface.cpp和skFontHost_android.cpp,其中後者是skia針對android平台字型實現的port。
主要的變數有:
struct FontInitRec {
const char* fFileName;
const char* const* fNames; // null-terminated list
};
struct FamilyRec {
FamilyRec* fNext;
SkTypeface* fFaces[5];
};
uint32_t gFallbackFonts[SK_ARRAY_COUNT(gSystemFonts)+1];
load_system_fonts()@skFontHost_android.cpp
load系統中所有的字型並給每種字型分配唯一的ID,並將字型分為兩種:FamilyFonts和FallbackFonts,skPaint通過應用程式設定的字型(Typeface)所對應的ID最終實現字元的顯示。
替換Android預設的漢字字型
在android系統中,DroidSans是預設字型,只包含西方字元,應用程式預設情況下都會調用它,而DroidSansFallback包含了東亞字元,當需要顯示的字元在DroidSans字型中不存在(如:漢字)時,
即沒有對應編碼的字元時,系統會到DroidSansFallback中去找相應編碼的字元,如果找到,
則使用DroidSansFallback字型來顯示它,如果仍找不到該編碼對應的字元,則無法在螢幕上顯示該字元。
更換預設中文字型的步驟為:
1、將幼圓字型庫youyuan.ttf重新命名為DroidSansFallback.ttf,覆蓋Android源碼中frameworks/base/data/fonts目錄下的DroidSansFallback.ttf檔案
2、重新編譯Android系統
3、編譯SDK。產生的SDK中,android預設的中文字型已更換為幼圓字型。該方法的不足是刪除了Android系統原來的中文字型
為android系統添加一種預設字型
在android系統中,預設的中文字型只有一種:DroidSansFallback.ttf,如果想在android應用程式中隨意設定想要的中文字型,
除了在應用程式中通過assets目錄引入字型檔外,還可以通過增加android預設字型的方式來實現。
添加步驟大致如下:
1、在frameworks/base/data/fonts目錄下添加字型檔,例如Driod-kaishu.ttf;
2、在skia中增加楷書這一字型,需要修改的檔案主要有skFontHost.cpp、skTypeface.cpp、Typeface.java等;
3、在java層添加楷書字型相關API,需要修改的檔案主要有typeface.java和textview.java;
4、編譯SDK
5、將新產生的sdk匯入eclipse,在eclipse中即可通過setTypeface(Typeface.KAISHU)和android:typeface=(“kaishu”)兩種方式設定自己添加的字型
Android字型Font相關知識