Delphi FMX 上的 Android 中对自定义字体的支持最近已在 Sydney 10.4 上实现,它在 Alexandria 11 中仍处于初级阶段。正如您所指出的,您必须输入“完整”字体名称才能使其在 Android 上工作,因为没有官方支持对于字体粗细。
但是,您仍然可以通过编辑和重新编译位于FMX.FontGlyphs.Android.pas
Delphi 安装文件中的一些源代码来获得所需的结果。你可以这样做:
LoadResource
从类中找到过程TAndroidFontGlyphManager
。您可以看到 FMX 如何查找仅采用系列名称和文件扩展名的字体。
- 检查内部过程
CreateTypefaceFromFamilyName
以及它如何确定当前字体的粗细。
- Following the logic of
CreateTypefaceFromFamilyName
add something like this just before the FontFile
variable is initialized (don't forget to declare 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';
- Change the assignment to
FontFile
from:
TPath.Combine(TPath.GetDocumentsPath, CurrentSettings.Family + '.otf');
to:
TPath.Combine(TPath.GetDocumentsPath, CurrentSettings.Family + FontStyle + '.otf');
(repeat for .ttf as well)
This should add support for Bold, Italic and Bold Italic for Android. This can be further extended to support more font weights as well, just check the TFontWeight
enum in unit FMX.Graphics.pas
.