我正在嘗試為我的 Firemonkey 應用程式實作一個自定義字體系列(多個 .otf 檔案,用于不同的權重,例如重、輕、常規、超輕......),該應用程式將部署在 Android 和 iOS 上。
在 iOS 上實作字體系列非常簡單,我所要做的就是將它們包含在 info.plist 檔案中。將字體應用于標簽時,在“字體”>“系列”下,我只需要鍵入“字體名稱”即可應用。請記住,沒有實際的“字體名稱”檔案,只有“字體名稱重”和其他權重。
這里有額外的問題,無論如何我如何在 FMX 中使用字體粗細?我沒有找到任何設定字體粗細的屬性。
然而,當在 Android 中做同樣的事情時,這是一個完全不同的結果。我在部署中包含字體,并且輸入“字體名稱”根本不應用它,但是如果我輸入“字體名稱 Ultralight”,則應用該重量的字體(在 iOS 上,添加“Ultralight”沒有效果)。更糟糕的是,向字體添加樣式(例如斜體和粗體)在 Android 上根本不適用,而在 iOS 上卻適用。
為什么這兩者的行為如此不同,如何克服差異,使它們都顯示相同的內容?
uj5u.com熱心網友回復:
最近在悉尼 10.4 上實作了對 Delphi FMX 上 Android 自定義字體的支持,從 Alexandria 11 開始它仍然是基本的。正如您所指出的,您必須輸入“完整”字體名稱才能使其在 Android 上運行,因為沒有官方支持對于字體權重。
但是,您仍然可以通過編輯和重新編譯位于FMX.FontGlyphs.Android.pasDelphi 安裝檔案中的一些源代碼來獲得所需的結果。你可以這樣做:
LoadResource從類中找到程序TAndroidFontGlyphManager。您可以看到 FMX 如何查找僅采用系列名稱和檔案擴展名的字體。- 檢查內部程式
CreateTypefaceFromFamilyName以及它如何確定當前字體的粗細。 - 遵循在變數初始化
CreateTypefaceFromFamilyName之前添加類似內容的邏輯FontFile(不要忘記宣告FontStyle):
FontStyle:='';
if not CurrentSettings.Style.Slant.IsRegular and not CurrentSettings.Style.Weight.IsRegular then
FontStyle:=' Bold Italic'
else if not CurrentSettings.Style.Weight.IsRegular then
FontStyle:=' Bold'
else if not CurrentSettings.Style.Slant.IsRegular then
FontStyle:=' Italic';
- 將分配更改為
FontFile:
TPath.Combine(TPath.GetDocumentsPath, CurrentSettings.Family '.otf');
到:
TPath.Combine(TPath.GetDocumentsPath, CurrentSettings.Family FontStyle '.otf');
(對 .ttf 也重復)
這應該為 Android添加對Bold、Italic和Bold Italic 的支持。這可以進一步擴展以支持更多字體權重,只需檢查TFontWeightunit 中的列舉即可FMX.Graphics.pas。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/322345.html
標籤:安卓 ios 德尔福 火猴 delphi-11-亚历山大
上一篇:為什么FileAge回傳意外值?
