2015-11-24 110 views
1

我使用自定義字體(精確地:我使用自定義字體)繪製(畫布)文本。但是,該字體不支持許多字符,因此一些(不支持的)字符看起來不同。現在我問自己以下問題:Android字體字體默認/回退

  • 不支持的字符是怎麼樣的 - 外觀是否取決於系統設置/在所有設備上外觀是否相同?
  • 什麼(默認)字體用於不支持的字符? (做不支持的字母有相同的尺寸到底是支持的嗎?)
+0

如果您使用畫布,則表示您完全控制了您的內容。如果您使用的是不支持的字符,那麼您已經知道它是什麼時候了,應該處理它。或者,如果您只是寫文本,請勿使用畫布編寫文本。您已經有了HTML,支持字體堆棧和使用CSS3進行功能選擇。值得利用這一點。 –

+0

你好邁克,謝謝你的輸入。但是,我們不是在談論Web開發,而是在談論Android。 – sjkm

回答

3

我通過Android代碼挖和想後我發現:

一個Typeface.class實例使用Typeface.class(createFromAsset/createFromFile/create/etc)的靜態創建方法創建。然後該實例擁有一個字體列表(不可修改List<Font>)。該列表的第一個元素是主要的字體(指定)和其它元素(索引:1 - (尺寸-1))是其從FontLoader.classgetFallBackFonts()

檢索除其他默認字體,Paint.class/Canvas.classdrawText())使用Typeface.class實例來繪製文本(以測量字符/繪製/等)。他們儘可能使用主要字體(Typeface.mFonts[0])。如果在主字體中找不到字符,則嘗試使用後備字體(Typeface.mFonts[1] - Typeface.mFonts[size-1])來測量和繪製字符。

結論

,如果你想使用自定義的字體可以使用Typeface.class實例。如果您的自定義字體不支持您想繪製的特定字符(/您在文本中使用該字符),那麼系統會嘗試使用後備字體。這些後備字體是通過FontLoader.class(來自system-xml)從系統加載的。