2012-06-05 46 views
0

我一直在尋找這麼多天。android在哪裏讀取文件fonts.xml來正確加載字體?

我公司的Android設備(由我們製造)使用Android 2.1。我們需要爲我們的客戶之一提供阿拉伯語支持。我們能夠獲得第三方軟件正確加入阿拉伯語,並從另一個第三方購買字體以在2.1中顯示阿拉伯文。

Android 2.1有一個名爲fonts.xml的文件,用於指定何時使用包括備用字體的字體。

我想知道代碼中的哪個組件讀取fonts.xml文件(當前位於/ frameworks/base/data/fonts中),以便我可以將此文件更改爲另一個位置,每次重建系統的新圖像。

謝謝!

UPDATE:

做了搜索fonts.xml我發現sdk.atree包含以下行:

# fonts for layoutlib. 
frameworks/base/data/fonts/fonts.xml     platforms/${PLATFORM_NAME}/data/fonts/fonts.xml 
frameworks/base/data/fonts/DroidSans.ttf    platforms/${PLATFORM_NAME}/data/fonts/DroidSans.ttf 
frameworks/base/data/fonts/DroidSans-Bold.ttf  platforms/${PLATFORM_NAME}/data/fonts/DroidSans-Bold.ttf 
frameworks/base/data/fonts/DroidSansMono.ttf   platforms/${PLATFORM_NAME}/data/fonts/DroidSansMono.ttf 
frameworks/base/data/fonts/DroidSerif-Bold.ttf  platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Bold.ttf 
frameworks/base/data/fonts/DroidSerif-BoldItalic.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-BoldItalic.ttf 
frameworks/base/data/fonts/DroidSerif-Italic.ttf  platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Italic.ttf 
frameworks/base/data/fonts/DroidSerif-Regular.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Regular.ttf 
frameworks/base/data/fonts/DroidSansFallback.ttf  platforms/${PLATFORM_NAME}/data/fonts/DroidSansFallback.ttf 
frameworks/base/data/fonts/DroidSansJapanese.ttf  platforms/${PLATFORM_NAME}/data/fonts/DroidSansJapanese.ttf 

不過,我沒有看到文件fonts.xm和DroidSansJapanese.ttf在我/系統/字體/

我建議我的工作將阿拉伯語字體重命名爲DroidSansJapanese.ttf,以便系統能夠讀取它,但這會在將來造成混亂。

我也嘗試手動將修改後的fonts.xml放入/ sytem/fonts並重新啓動設備,但沒有奏效。

另外,FontLoader.java加載fonts.xml,但它並沒有指定整個路徑,因爲它被Bridge.java傳遞。 Bridge.java也通過完整路徑。使用的變量是String fontOsLocation。它在這兩個類命名這個樣子,所以我做了搜索,但沒有發現任何源指定的確切位置:

public static FontLoader create(String fontOsLocation) {} 

我最後的辦法是嘗試重新寫FontLoader因此,即使它需要一個字符串fontOsLocation,我只是給它一個來自SD卡的硬編碼路徑。但我不知道這可能會對系統產生什麼影響。謝謝。

+0

當您搜索到'fonts.xml'的Android源代碼副本時,您發現了什麼? – CommonsWare

+0

更新了我的問題。 –

回答

2

好吧,所以我找到了一個解決方案。對於任何運行到這個問題,這裏有雲:

外部/ Skia的/ src目錄/端口/ SkFontHost_android.cpp - >指定其中的.ttf文件被用於哪一種風格

和字體文件需要被添加於:

框架/基/數據/字體/ - >這裏有所有的.ttf文件

內部框架/基/數據/字體/文件夾

和Android.mk需要這樣的新字體也修改文件從該文件夾複製到/ system/fonts

希望這可以幫助某人。

+0

嘿。正在尋找類似的東西,並發現這個有用的,謝謝:-)你會有任何洞察到如何字體可以動態改變,而操作系統啓動?(比如三星在其S3 ROM中如何允許系統字體從設置中動態更改) –

+0

您是指從應用程序?您只需調用typefonts類來更改字體:Typeface = Typeface.createFromAsset(getAssets(),「fonts/Kokila.ttf」); txtyour.setTypeface(type); –

+0

嘿,沒有任何一個應用程序。我的意思是改變整個系統字體。在ICS中說你想把Roboto改成Arial。在飛行中,無需重新啓動? –