Android字型Font相關知識

來源:互聯網
上載者:User

標籤:


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相關知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.